首页> 疑难解答
属性初始化程序在“self”可用之前运行
withpy
2021-06-19
简介似乎我遇到了一些不应该出现问题的问题......但我想请求一些帮助。这里有一些解释我没有得到。有两个简单......
似乎我遇到了一些不应该出现问题的问题......但我想请求一些帮助。
这里有一些解释我没有得到。
有两个简单的类,其中一个引用另一个,如下所示;
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
}
我得到了注释编译错误。请有人告诉我该怎么办才能解决这个案子?
非常感谢任何好人的帮助!
投票
正如vadian正确指出的那样,你应该在这样的场景中创建一个init
:
class MyOwn {
let myUser: User
var life: Int
init() {
self.myUser = User(name: "John", age: 100)
self.life = myUser.age
}
}
您不能为依赖于另一个实例属性的存储属性提供默认值。
投票
你应该像这样申报生活:
lazy var life:Int = {
return self.myUser.age
}()
因为您在初始化过程中尝试将一个属性(变量)初始化为另一个属性(变量)。此时变量尚不可用。
相关文章
-
为什么循环从对象数组中打印相同的东西?
当我运行程序并输入几个抵押贷款然后结束程序时,它打印出整个对象数组,mortgageArray [],但由于某种原因它只打印出最后一个...
-
clr profiler api:是ICorProfilerCallback :: ExceptionThrown GC安全
我想知道.net框架分析器,ExceptionThrown(https://docs.microsoft.com/en-us/dotnet/framework/unmanaged-api/profiling/icorprofilercallback-exceptionthrown-method)保证不...
-
如何在go中有效地连接字符串
在Go中,字符串是原始类型,这意味着它是只读的,对其进行的每次操作都会创建一个新的字符串。因此,如果我想多次连接字符串而又不知道...
-
如何在运行node / nodemon时禁止某些警告?
我正在使用高地。在我的项目中,我用bluebird替换了本机promise实现。现在,我的应用程序产生了很多警告,通过以下方式向控制台发送垃圾邮件:(节点:1503)警告:...
-
我在哪里可以找到一些新手到AS3的AS3资源,而不是编程
我是一位经验丰富的Web开发人员。我知道LAMP堆栈,我可以从程序级别使用Javascript。我正在寻找的是没有先前动作脚本的人的良好资源...
-
Python需要类似字节的对象,而不是'str'
我是Python的新手。我正在运行以下简单的Web服务器:来自wsgiref.simple_server从io import导入make_server BytesIO def message_wall_app(environ,start_response):output = BytesIO(...