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)以避免保留周期.