为什么这会引发错误?我知道我缺少一些琐碎的东西,但是它一直在逃避我:
var name = "John"
var nameLabel: UILabel = {
let label = UILabel()
label.text = "Coins: \(name)"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
显示的错误是“实例成员'name'不能在ViewController类型上被忽略”
答案 0 :(得分:1)
正如@Vadian所说,您需要懒惰,但是为什么呢?
在类级别创建变量和常量时,它们彼此之间还不认识。它处于非常早期的初始化状态。因此,在某些情况下,您需要使用defer {}
来等待所有初始化,然后再调用值。
Lazy
用作defer {}
,在您的情况下,具有lazy
属性的变量在实际使用之前不会被创建。这意味着变量name
将有时间进行初始化。
编辑:请将@Vadiians答案标记为正确答案。这只是更深入的解释。
答案 1 :(得分:0)
您缺少lazy
才能访问name
lazy var nameLabel: UILabel = { ...