注:この問題は、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を試すことができます。
のXcodeを書いてみますか?私は何か見落としてますか? –
申し訳ありませんが、今修正されました。 – Deny