2016-10-11 16 views
0

私はインスタンス変数であるために、キャッシュをクリアするためにクロージャを作成しようとしています。私は、[unowned self]を呼び出そうとすると、 "unownedは(UIViewController)ではなく、クラスとクラスにバインドされたプロトコルタイプにしか適用できないというエラーが出ます。">> UIViewController '....なぜそれを上げているのか分かりません。インスタンス変数でselfを呼び出すことによって作成された保持サイクルはありませんか?もしそうなら、なぜですか?事前にありがとうございます、ここでの問題は、フェーズ1の初期化が完了するまで、あなたがselfを使用することができないということです心配コードがインスタンス変数でインスタンス化されていない自己

class UIViewController 
{ 
    var repostCache : [String : Bool] = [String : Bool]() 
    let clearRepostCache = { [unowned self] in 
     self.repostCache = [String : Bool]() 
    } 
} 
+0

なぜこのプロパティを関数にしていませんか? – AdamPro13

答えて

2

スニペットです。したがって、プロパティの初期値としてselfを使用することはできません。

selfをインスタンスメソッド(またはフェーズ1の初期化後にイニシャライザ)のどこかに移動する必要があります。例えば

class ViewController: UIViewController { 
    var repostCache: [String: Bool] = [:] 
    private(set) var clearRepostCache: (()->Void)! 
    override func viewDidLoad() { 
     clearRepostCache = { [unowned self] in 
      self.repostCache = [:] 
     } 
    } 
} 

あなたはここでは、2つのフェーズの初期化についてのドキュメントを見つけることができます。

Class Inheritance and Initialization

と紛らわしい診断メッセージについては、より良いバグレポートを送信します。

+0

完璧な答え、ありがとうございます。私は診断メッセージによって非常に誤解された – Coach