属性 初始值设定项 运行 在 'self' 可用之前
Property initializers run before 'self' is available
似乎我遇到了一些不应该出现的问题...但我想寻求一些帮助。
Stack 上有一些我不明白的解释。
有两个简单的 类,其中一个引用另一个,如下所示:
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
}
我收到注释的编译错误。有人可以告诉我我应该怎么做才能破案吗?
你应该这样宣告人生:
lazy var life:Int = {
return self.myUser.age
}()
因为您试图在初始化过程中用另一个 属性(变量)初始化另一个。目前还没有变量。
正如 vadian 正确指出的那样,您应该在这种情况下创建一个 init
:
class MyOwn {
let myUser: User
var life: Int
init() {
self.myUser = User(name: "John", age: 100)
self.life = myUser.age
}
}
您不能为 依赖于 另一个实例 属性 的存储 属性 提供默认值。
似乎我遇到了一些不应该出现的问题...但我想寻求一些帮助。
Stack 上有一些我不明白的解释。
有两个简单的 类,其中一个引用另一个,如下所示:
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
}
我收到注释的编译错误。有人可以告诉我我应该怎么做才能破案吗?
你应该这样宣告人生:
lazy var life:Int = {
return self.myUser.age
}()
因为您试图在初始化过程中用另一个 属性(变量)初始化另一个。目前还没有变量。
正如 vadian 正确指出的那样,您应该在这种情况下创建一个 init
:
class MyOwn {
let myUser: User
var life: Int
init() {
self.myUser = User(name: "John", age: 100)
self.life = myUser.age
}
}
您不能为 依赖于 另一个实例 属性 的存储 属性 提供默认值。