大佬教程收集整理的这篇文章主要介绍了Swift UINavigationController子类中的强制init覆盖,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的实现示例,简化为尽可能简单,可以在游乐场中运行.
import UIKit public class MyNavigationController: UINavigationController { public var anyVar: Int? public init(anyVar: int) { let viewController = UIViewController() super.init(rootViewController: viewController) self.anyVar = anyVar } required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } } let navigationController = MyNavigationController(anyVar: 42)
最后一行是崩溃,有一个EXC_BAD_instrUCTION.当我在xcode中运行时,它在运行时告诉我init(nibName nibNameOrNil:String?,bundle nibBundLeorNil:NSBundle?)丢失了.
如果我覆盖该方法:
public override init(nibName nibNameOrNil: String?,bundle nibBundLeorNil: NSBundle?) { super.init(nibName: nibNameOrNil,bundle: nibBundLeorNil) }
……一切运作良好:您可以尝试自己的游乐场.
我不明白为什么.这对我来说听起来不合逻辑.
UIViewController文档说:
但我的init(nibName nibNameOrNil:String?,bundle nibBundLeorNil:NSBundle?)覆盖从super.init(rootViewController:viewController)初始化调用!
如果没有覆盖它,我想应该调用UIViewController的init(nibName:bundle :),但不是.
我仍然无法理解为什么覆盖该方法并调用super使程序更好地工作. IMO,覆盖一个方法,而只调用super.thisMethod是完全没用的,它只在调用堆栈中添加一个方法调用.
以上是大佬教程为你收集整理的Swift UINavigationController子类中的强制init覆盖全部内容,希望文章能够帮你解决Swift UINavigationController子类中的强制init覆盖所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。