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