2017-12-01 6 views
0

注:この問題は、Xcode 8 & Swift 3.1にあります。 Xcode 9 &スウィフト4はうまく動作します自己変数を持つレイジープロパティinit

私は遅延可変の単純なビューコントローラを持っています。ストーリーボードからインスタンス化されています。ここでは、コードは次のようになります。

import UIKit 

final class ChildViewController: UIViewController { 

    private lazy var barButton = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark)) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     navigationItem.rightBarButtonItems = [barButton] 
    } 

    func addBookmark() { 
     print("Bookmark Added") 
    } 

} 

問題barButton変数がviewDidAppear(_:)呼び出しではなく、直接init(withCoder:)呼び出しの後に初期化されていないということです。この時点で自己変数はnilです。私は自分のクラスを試しましたが、結果は同じでした。

しかし、私はこのような怠惰なVARを宣言するとき、すべてが正常に動作している:?

private lazy var barButton: UIBarButtonItem = { 
    UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark)) 
}() 

はなぜ怠惰な変数は次のように初期化される `

あなたがexample projectを試すことができます。

+4

のXcodeを書いてみますか?私は何か見落としてますか? –

+0

申し訳ありませんが、今修正されました。 – Deny

答えて

0

** 10 **私はそれを実行することはできませんが、私はこれが動作すると思います、

private lazy var barButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark)) 
+0

これは私と同じ表現で、違いはありません。 – Deny

関連する問題