注意:此问题出现在Xcode 8& Swift 3.1。 Xcode 9& Swift 4工作正常
我有一个带有惰性变量的简单视图控制器。它是从故事板中实例化的。这是代码:
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
。我尝试了自己的课,结果是一样的。
但是当我宣布像这样的懒惰变量时,一切都运行良好:
private lazy var barButton: UIBarButtonItem = {
UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))
}()
为什么延迟变量是这样初始化的?`
您可以尝试example project。
答案 0 :(得分:0)
我无法运行它,但我认为这样可行,请尝试编写
private lazy var barButton: UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))