UIViewController
类定义了一个单一指定初始化,init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
和不便利初始化器,但是,它是可能写入的代码下面的行,并且具有其编译(6.1.1的Xcode)UIViewController如何在Swift中设置默认的非参数初始值设定项?
let vc = UIViewController()
这是如何可能?
据雨燕的书,这里有初始化继承的规则
规则1如果你的子类没有定义任何指定的初始化程序,它 自动继承其所有超类指定初始化的。
规则2如果你的子类,要么初始化通过继承他们为每 规则1提供其所有 超指定的一个实现,或通过提供一个自定义实现其 定义然后,它会自动继承所有的一部分
摘录自:苹果公司“The Swift Programming Language。”iBooks。 https://itun.es/us/jEUH0.l
因此UIViewController
不能继承其祖先init()
方法超类NSObject
,那么哪里初始化从何而来?
在另一个说明中,因为每个swift类必须最终调用它的指定初始化方法,那么这是不是意味着initWithCoder:
也最终会调用init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?)
?但是,实际情况似乎并非如此。
它有一个'initWithCoder:'方法,因为它符合'NSCoding',它需要它。不知道为什么它有一个默认的初始化器...因为它是一个Objective-C类而不是Swift类,所以不需要遵循Swift继承的规则,所以它不必调用指定的初始化器。如果你在Swift中重写它,你可能不得不这样做。迅速尝试做的很大一部分是澄清许多这些奥术规则的例外。 – 2015-02-06 18:14:08