在初始化程序的实现中必须完成什么?

时间:2015-10-04 20:03:51

标签: ios swift initializer

初始化程序的实现必须完成什么?

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

答案是正确的,为什么?

1 个答案:

答案 0 :(得分:2)

在我看来,这是一个非常令人困惑的问题。因为您作为开发人员必须做的是选项c。

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

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

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

swift docu

  

在创建该类或结构的实例时,类和结构必须将其所有存储属性设置为适当的初始值。存储的属性不能保留在不确定的状态。

     

您可以在初始值设定项中设置存储属性的初始值,也可以通过将默认属性值指定为属性定义的一部分来设置初始值。以下各节介绍了这些操作。

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

现在b。和a。保留explicitly assignedinitialized措辞的细微差别。因此我会放弃选项b,因为bc变量不需要任何显式值,隐式nil在时间上完全正常(阅读c将无法正常工作但是虽然)

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

<强> TL;博士

  

我的最终答案是选项a。