Raf*_*alK 18 properties class init lazy-initialization swift
似乎我遇到了一些不应该出现问题的问题......但我想请求一些帮助.
这里有一些解释我没有得到.
有两个简单的类,其中一个引用另一个,如下所示;
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
}
Run Code Online (Sandbox Code Playgroud)
我得到了注释编译错误.请有人告诉我该怎么办才能解决这个案子?
非常感谢任何好人的帮助!
Pau*_*tos 20
正如vadian正确指出的那样,你应该init
在这样的场景中创建:
class MyOwn {
let myUser: User
var life: Int
init() {
self.myUser = User(name: "John", age: 100)
self.life = myUser.age
}
}
Run Code Online (Sandbox Code Playgroud)
您不能为依赖于另一个实例属性的存储属性提供默认值.
您应该这样声明生活:
lazy var life:Int = {
return self.myUser.age
}()
Run Code Online (Sandbox Code Playgroud)
因为您正在尝试在初始化过程中用另一个属性初始化一个属性(变量)。目前,变量尚不可用。