Swift lazy-var和let的区别

Swift lazy-var和let的区别,swift,Swift,下面的代码可以工作,但是当我将lazy var更改为let时,它就不能工作了。我不知道为什么 lazy var collectionView : UICollectionView = { let layout = UICollectionViewLayout() let cv = UICollectionView(frame: .zero, collectionViewLayout: layout) cv.translatesAutoresizingMaskIntoCon

下面的代码可以工作,但是当我将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
}()
上述代码正常工作,但以下代码有错误:

来自文档:

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

摘自:苹果公司《Swift编程语言(Swift 3.0.1)》


在iBooks Store上查看这本书:

原因是您使用延迟初始化是因为在初始化对象之前,属性的初始值是未知的

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

你的数据还不可用,这就是它不起作用的原因


它有错误,因为这是声明常量属性的错误语法。