2017-06-24 64 views
0

我有一個錯誤「Closure不能隱式捕獲自我參數」。請告訴我它是如何修復的?關閉不能隱式捕獲自我參數。 Swift

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 
     } 
    } 
} 
+2

可能重複的[閉包不能隱式捕獲變異自參數](https://stackoverflow.com/questions/41940994/closure-cannot-implicitly-capture-a-mutating-self-paramter) – Moriya

回答

4

這是因爲您使用的是struct。由於結構體是有價值的,它們會在閉包內複製(使用COW-CopyOnWrite)以供您使用。現在顯而易見,複製的屬性被「let」複製,因此您無法更改它們。如果你想用回調來改變局部變量,你必須使用class。並且要小心避開自己([weak self] in)以避免保留週期。

+0

我使用類,它運作良好,但我遇到了一個新問題。 RepoJson.get(網址:代表[ 「網址」]作爲字符串!){(結果:RepoJson)在 如果讓repoData = {結果 self.repo = repoData }} self.repo沒有得到值,這裏很好。但是,當我打印陣列回購等於零。 –

+0

你是否在初始化課程後立即打印它?因爲回購將在回調返回值後被填充。 – farzadshbfn

+0

我創建按鈕並按下它,始終等於零。 –