ios – 在Swift的NSObject子类的初始化程序中调用super.init()

ios – 在Swift的NSObject子类的初始化程序中调用super.init(),第1张

概述我在 Swift中构建一个iOS应用程序,并绘制了Apple提供的 Lister示例项目. Lister使用两个模型对象:List和ListItem.我发现他们都不会在初始化器中调用super.init(),即使它们是NSObject子类. 然而,在Lister的Objective-C版本中,两个模型对象(AAPLList和AAPLListItem)都调用[super init]. Swift编程 我在 Swift中构建一个iOS应用程序,并绘制了Apple提供的 Lister示例项目.

Lister使用两个模型对象:List和ListItem.我发现他们都不会在初始化器中调用super.init(),即使它们是NSObject子类.

然而,在Lister的Objective-C版本中,两个模型对象(AAPLList和AAPLListItem)都调用[super init].

Swift编程语言清楚地表示:“指定的初始化程序必须从其直接超类调用指定的初始化程序”(初始化程序初始化器链接的规则1)

这里发生了什么?为什么这是一个异常,如果你不应该总是在一个子类中调用super.init(),那么什么规则适用?

解决方法 即使我在文档中找不到这个描述的地方,发生的情况是,默认超类初始化器在子类初始化器的末尾被调用,如果它是超类的唯一初始化器,并且没有被调用明确.

NSObject只有默认的初始化(init());您可以通过在不调用super.init()的构造函数中尝试引用self(例如.println(self)),在子类初始化器的末尾调用超类初始化器:您不允许这样做,因为那个阶段还没有完全初始化.

如果要在构造函数中使用自己的某个地方,则需要在该点完全构造对象,因此您需要在此之前手动调用super.init().

总结

以上是内存溢出为你收集整理的ios – 在Swift的NSObject子类的初始化程序中调用super.init()全部内容,希望文章能够帮你解决ios – 在Swift的NSObject子类的初始化程序中调用super.init()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1097516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存