闭包不能隐式捕获自身参数。迅速

时间:2017-06-24 09:39:22

标签: swift xcode closures

我收到错误“Closure无法隐式捕获自身参数”。请告诉我它是如何解决的?

struct RepoJson {
...
    static func get(url: String, completion: @escaping (RepoJson!) -> ()) {
        ...
    }
} 

struct UsersJson {
    var repo: RepoJson!
    init() throws {   
        RepoJson.get(url: rep["url"] as! String) { (results:RepoJson?) in
            self.repo = results //error here
        }
   }
}

1 个答案:

答案 0 :(得分:11)

这是因为你正在使用struct。由于结构是值,因此它们会在闭包内复制(使用COW-CopyOnWrite)以供您使用。现在显而易见的是,复制的属性被“let”复制,因此您无法更改它们。如果要使用回调更改局部变量,则必须使用class。并注意自我弱([weak self] in)以避免保留周期。