初始化程序的实现必须完成什么?
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 :(得分:2)
在我看来,这是一个非常令人困惑的问题。因为您作为开发人员必须做的是选项c。
看看这个简单的代码示例和可编译的最小init
class SomeClass {
var a : AnyObject
var b : AnyObject?
var c : AnyObject!
var d = ":)"
init() {
a = ""
print("initialized")
}
}
在创建该类或结构的实例时,类和结构必须将其所有存储属性设置为适当的初始值。存储的属性不能保留在不确定的状态。
您可以在初始值设定项中设置存储属性的初始值,也可以通过将默认属性值指定为属性定义的一部分来设置初始值。以下各节介绍了这些操作。
选项d。因为对象创建是由底层运行时环境而不是通过初始化程序处理的,所以是无意义的。
现在b。和a。保留explicitly assigned
与initialized
措辞的细微差别。因此我会放弃选项b,因为b
和c
变量不需要任何显式值,隐式nil
在时间上完全正常(阅读c
将无法正常工作但是虽然)
因此我的答案选择是选项a。在init方法之后,所有属性都需要具有一些特定值。其中一些显式地在init函数中,其中一些是隐含的。
<强> TL;博士强>:
我的最终答案是选项a。