【问题标题】:Where is initialization taking place, in the init method or in the instance declaration?初始化发生在哪里,在 init 方法中还是在实例声明中?
【发布时间】: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?")

【问题讨论】:

    标签: swift class initialization


    【解决方案1】:

    初始化发生在init 方法中。请注意,init 采用一个参数 text,并将该参数分配给 self.text

    【讨论】:

    • 那么在 text 属性中初始化了什么值?我在这里看到的只是一个分配给 self.text 的空变量...??
    • 是否满足初始化......设置一个空变量作为self.text的值??
    • @Ali:不,在initself.text = texttext 参数分配给self.textself.text 永远不会为空。它在声明时没有值(在let text: String 中),但在对象被初始化之前你根本不能使用它,所以self.text 永远不会为空。
    • .....文本参数从发送值“甜菜怎么样?”的实例声明中获取其值......正确吗?
    • 所以从技术上讲,类定义在创建它的实例之前不会运行......?
    【解决方案2】:

    我相信您的代码中遵循的过程是:

    1. 您调用 SurveyQuestion(text: "How about beets?") 以获取 SurveyQuestion 类的实例。
    2. 当类运行时,它的初始化方法init(text: String) 会初始化所有属性。这意味着您正在初始化 text 属性,并为其赋予一个值。
    3. 最后,该类完成初始化,您将获得该类的一个实例。

    这对应于 Apple 的文档,因为当您初始化类时,属性会被初始化,但在 init 方法完成之前您不会获得类实例,这意味着直到所有属性都被初始化。

    对不起,初始化冗余,我没有找到另一种解释方式。 希望能解决你的疑惑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多