Ios 在初始化器的实现中必须完成什么?

Ios 在初始化器的实现中必须完成什么?,ios,swift,initializer,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

在初始化器的实现中必须完成什么

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

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

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

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

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

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

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

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

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

现在b。和a。保留明确指定的
与初始化的
在措辞上的细微差别。因此,我将放弃选项b,因为
b
c
变量不需要任何显式值,隐式
nil
暂时还可以(尽管读取
c
还不起作用)

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

tl;博士

我的最终答案是选项a。


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