Swift 4:转义闭包只能通过值显式捕获inout参数

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

我一直在将我的代码从Swift 2迁移到Swift 4。我有以下代码在Swift 2中运行良好:

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 {