执行初始化程序必须完成什么?

执行初始化程序必须完成什么?

问题描述:

执行初始化程序必须完成什么?执行初始化程序必须完成什么?

a. All properties need to be initialized with a value 

b. All properties need to be explicitly assigned a value. 

c. All non-Optional properties need to be initialized. 
    Sorry, that's incorrect. 
    Optionals need to be initialized as well. 

d. The object needs to be created 

什么答案是正确的,为什么?

+0

我认为第一个'a'答案是正确的,对象应该初始化它的所有属性,并且调用'super'(应该初始化'superclass'的所有属性) – gaussblurinc

在我看来这是非常容易混淆的问题。因为你作为开发者必须做的是选项c。

看看这个简单的代码示例和最小init是编译

class SomeClass { 
    var a : AnyObject 
    var b : AnyObject? 
    var c : AnyObject! 
    var d = ":)" 

    init() { 
     a = "" 
     print("initialized") 
    } 
} 

swift docu状态

类和结构必须所有的存储属性设置为一个适当的初始值到创建该类或结构的实例时为止。存储的属性不能处于不确定状态。

您可以在初始化程序中设置存储属性的初始值,或者通过将默认属性值指定为属性定义的一部分。这些操作在以下各节中进行介绍。

选项d。 imho是无意义的,因为对象创建是由底层运行时环境处理的,而不是通过初始化程序处理的。

现在b。和a。在措辞explicitly assignedinitialized之间保持着微小的差异。因此,我会放弃选择B,因为该bc变量不需要任何明确的价值,隐含nil是时间(读c将没有工作,虽然)完全正常

所以我的答案选择是选一个。在init方法之后,所有的属性都需要有一些特定的值。其中一些显式地在init函数中,其中一些隐式地。

TL;博士

我最后的答案是选择一个。