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

Yur*_*rov 1 xcode closures swift

我有一个错误"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
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

far*_*bfn 11

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