好像我遇到了一些不应该出现的问题......但是我想寻求一些帮助。
堆栈中有一些解释我不明白。
有两个简单的类,其中一个引用另一个,如下所示:
class User {
lazy var name: String = ""
lazy var age: Int = 0
init (name: String, age: Int) {
self.name = name
self.age = age
}
}
class MyOwn {
let myUser: User = User(name: "John", age: 100)
var life = myUser.age
//Cannot use instance member 'myUser' within property initializer
//property initializers run before 'self' is available
}
我得到了注解编译错误。有人能告诉我该怎么做才能解决这个问题吗?
3条答案
按热度按时间omtl5h9j1#
正如vadian正确指出的那样,您应该在以下场景中创建
init
:不能为 * 依赖于 * 另一个示例属性的存储属性提供默认值。
gojuced72#
你应该这样宣告生命:
因为在初始化过程中,您试图用一个属性(变量)初始化另一个属性。此时变量还不可用。
zazmityj3#
对我有效的方法是将变量转换为计算属性