初始化发生在哪里,在 init 方法中还是在实例声明中?
Posted
技术标签:
【中文标题】初始化发生在哪里,在 init 方法中还是在实例声明中?【英文标题】:Where is initialization taking place, in the init method or in the instance declaration? 【发布时间】:2015-09-02 16:39:26 【问题描述】:请不要让我去阅读苹果网站上的链接,因为我已经阅读了所有内容!
我对属性“文本”的实际初始化发生在哪里感到困惑?是在 init 方法中还是在实例声明中发生?
因为在我看来,text 属性的初始化是在实例声明中发生的,它被赋予值“甜菜怎么样?”
如果是这样,那为什么苹果书规定必须在创建实例之前初始化所有属性?在类定义中(如果我错了,请纠正我)
最后,如果'text'实际上是在类定义中初始化的......初始化在哪里??
class SurveyQuestion
let text: String
var response: String?
init(text: String)
self.text = text
func ask()
print(text)
let beetsQuestion = SurveyQuestion(text: "How about beets?")
【问题讨论】:
【参考方案1】:初始化发生在init
方法中。请注意,init
采用一个参数 text
,并将该参数分配给 self.text
。
【讨论】:
那么在 text 属性中初始化了什么值?我在这里看到的只是一个分配给 self.text 的空变量...?? 是否满足初始化......设置一个空变量作为self.text的值?? @Ali:不,在init
,self.text = text
将text
参数分配给self.text
。 self.text
永远不会为空。它在声明时没有值(在let text: String
中),但在对象被初始化之前你根本不能使用它,所以self.text
永远不会为空。
.....文本参数从发送值“甜菜怎么样?”的实例声明中获取其值......正确吗?
所以从技术上讲,类定义在创建它的实例之前不会运行......?【参考方案2】:
我相信您的代码中遵循的过程是:
-
您调用
SurveyQuestion(text: "How about beets?")
以获取 SurveyQuestion 类的实例。
当类运行时,它的初始化方法init(text: String)
会初始化所有属性。这意味着您正在初始化 text 属性,并为其赋予一个值。
最后,该类完成初始化,您将获得该类的一个实例。
这对应于 Apple 的文档,因为当您初始化类时,属性会被初始化,但在 init 方法完成之前您不会获得类实例,这意味着直到所有属性都被初始化。
对不起,初始化冗余,我没有找到另一种解释方式。 希望能解决你的疑惑。
【讨论】:
以上是关于初始化发生在哪里,在 init 方法中还是在实例声明中?的主要内容,如果未能解决你的问题,请参考以下文章