我正在使用Swift构建iOS应用程序,并参考苹果提供的Lister示例项目。
Lister使用两个模型对象:List和ListItem。我发现,尽管它们是NSObject的子类,但两者的初始化器都没有调用
然而,在Lister的Objective-C版本中,这两个模型对象(AAPLList和AAPLListItem)都调用了
《Swift编程语言》明确指出,“指定初始化器必须从其直接超类调用一个指定初始化器。”(初始化中的初始化器链接规则1)
这里发生了什么?为什么这是一个例外情况?如果您不应该在子类中始终调用super.init(),那么哪些规则适用?
Lister使用两个模型对象:List和ListItem。我发现,尽管它们是NSObject的子类,但两者的初始化器都没有调用
super.init()
。然而,在Lister的Objective-C版本中,这两个模型对象(AAPLList和AAPLListItem)都调用了
[super init]
。《Swift编程语言》明确指出,“指定初始化器必须从其直接超类调用一个指定初始化器。”(初始化中的初始化器链接规则1)
这里发生了什么?为什么这是一个例外情况?如果您不应该在子类中始终调用super.init(),那么哪些规则适用?