【发布时间】:2018-05-15 16:17:25
【问题描述】:
注意:此问题存在于 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:) 调用之后直接初始化的。而此时self变量为nil。我尝试了自己的课,结果是一样的。
但是当我像这样声明惰性变量时,一切正常:
private lazy var barButton: UIBarButtonItem = {
UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: #selector(addBookmark))
}()
为什么惰性变量是这样初始化的?`
你可以试试example project。
【问题讨论】:
-
Xcode 10 ?我错过了什么吗?
-
抱歉,现在已经修复了。
标签: ios swift lazy-initialization