lazy var和let之间的区别

时间:2017-05-27 20:59:13

标签: swift

以下代码有效,但是当我将lazy var更改为let时,它无法正常工作。我不知道为什么

lazy var collectionView : UICollectionView = {
    let layout = UICollectionViewLayout()
    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
    cv.translatesAutoresizingMaskIntoConstraints = false
    cv.backgroundColor = .red
    cv.dataSource = self
    cv.delegate = self
    return cv
}()

以上代码有效,但以下代码有错误:

Error

2 个答案:

答案 0 :(得分:3)

原因是你使用延迟初始化是指在初始化对象之后才知道属性的初始值。

此外,您需要使用var关键字而不是let关键字声明您的惰性属性,因为常量在初始化完成之前必须始终具有值。

您的数据尚不可用,这就是无法正常工作的原因

see more here

答案 1 :(得分:2)

来自文档:

  

“您必须始终将惰性属性声明为变量(使用var关键字),因为在实例初始化完成之后,可能无法检索其初始值。常量属性在初始化完成之前必须始终具有值,因此不能声明为惰性。“

摘自:Apple Inc.“The Swift Programming Language(Swift 3.0.1)。”

在iBooks商店中查看此书:https://itun.es/us/jEUH0.l