Swift 4:转义闭包只能通过值显式捕获inout参数
我一直在将我的代码从Swift 2迁移到Swift 4。我有以下代码在Swift 2中运行良好:Swift 4:转义闭包只能通过值显式捕获inout参数,swift,swift4,Swift,Swift4,我一直在将我的代码从Swift 2迁移到Swift 4。我有以下代码在Swift 2中运行良好: func fetchUserThumbnailAvatar(_ task : inout URLSessionTask?, completion : @escaping (_ image : UIImage?) -> ()) { fetchUserAvatar(Session.currentUser?.avatar?.thumbnailURL as URL? ?? URL(string
func fetchUserThumbnailAvatar(_ task : inout URLSessionTask?, completion : @escaping (_ image : UIImage?) -> ()) {
fetchUserAvatar(Session.currentUser?.avatar?.thumbnailURL as URL? ?? URL(string:"")!, externalUrl: URL(string: thumbnailAvatar) ?? URL(string:"")!, &task, completion: completion)
}
fileprivate func fetchUserAvatar(_ internalUrl : URL, externalUrl : URL,_ task : inout URLSessionTask?, completion : @escaping (_ image : UIImage?) -> ()) {
fetchImage(externalUrl, task: &task, completion: { image in
if image == nil {
self.fetchImage(internalUrl, task: &task, completion: completion)
} else {
self.cache.removeObject(forKey: (internalUrl.path as AnyObject?)! )
completion(image)
}
})
}
但是,在转换后,我得到以下错误:
转义闭包只能通过值显式捕获inout参数
第行:
if image == nil {
self.fetchImage(internalUrl, task: &task, completion: completion)
}
如果有人能帮助我,那就太好了。谢谢。详细描述了错误 代码的问题是第一个闭包
fileprivate func fetchUserAvatar(_ internalUrl : URL, externalUrl : URL,_ task : inout URLSessionTask?, completion : @escaping (_ image : UIImage?) -> ()) {
fetchImage(externalUrl, task: &task, completion: { image in // <-- HERE --
if image == nil {
fileprivate func fetchUserAvatar(uu内部URL:URL,外部URL:URL,uu任务:inout-URLSessionTask?,完成:@escaping(u图像:UIImage?)->()){
fetchImage(外部URL,任务:&任务,完成:{image in//请显示fetchImage的代码
function@George_E_2:fetchImage
不是问题所在。问题在于task
作为inout参数提供给了fetchImage
,并且周围的闭包已经在转义。请参阅我的答案。
if image == nil {
self.fetchImage(internalUrl, task: &task, completion: completion) // <-- HERE --
} else {