即使初始化后,为什么仍会收到此错误?

时间:2019-08-24 09:20:23

标签: swift

为什么这会引发错误?我知道我缺少一些琐碎的东西,但是它一直在逃避我:

var name = "John"

    var nameLabel: UILabel = {
    let label = UILabel()
    label.text = "Coins: \(name)"
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

显示的错误是“实例成员'name'不能在ViewController类型上被忽略”

2 个答案:

答案 0 :(得分:1)

正如@Vadian所说,您需要懒惰,但是为什么呢?

在类级别创建变量和常量时,它们彼此之间还不认识。它处于非常早期的初始化状态。因此,在某些情况下,您需要使用defer {}来等待所有初始化,然后再调用值。

Lazy用作defer {},在您的情况下,具有lazy属性的变量在实际使用之前不会被创建。这意味着变量name将有时间进行初始化。

编辑:请将@Vadiians答案标记为正确答案。这只是更深入的解释。

答案 1 :(得分:0)

您缺少lazy才能访问name

lazy var nameLabel: UILabel = { ...