Swift不允许您将函数返回值放在该函数的块中。从SO上看,我发现我需要在函数内部使用完成块,如下所示。
// This function error for non-void return value
static func dataForURL(_ url: String)-> UIImage) {
blockfunc(completion: { (data, error) in
return data
})
}
// This function is okay
static func dataForURL(_ url: String, completion: @escaping (Data?) -> Void) {
blockfunc(completion: { (data, error) in
completion(((error == nil) ? data : nil))
})
}
如果我只需要添加一次,那就没问题了 我通过以下方式设置了应用程序架构:
Cell asks PhotoManager for photo -> PhotoManager begins asking file directory/service -> Service will ask FireBaseHelper class to return data from a url
我上面的功能是链中的最后一个,在向firebase询问图像时是什么?步。那么我现在需要为该链中的每个函数添加完成块吗?有没有更好的方法来构建这种流程?