第一部分
我正在使用NSExtensionPrincipalClass
编写Today Widget扩展,而不是使用故事板。我实现了以下必需的初始化方法:
required init(coder aDecoder: NSCoder) {
tableView = UITableView()
cellIdentifier = "kCellIdentifier"
super.init(coder: aDecoder)
}
然而,当我运行项目时,出现以下错误。
use of unimplemented initializer 'init()'
所以,通过在项目中加入这个额外的代码,可以解决问题,但在多个地方初始化变量似乎不太对。
override init() {
tableView = UITableView()
cellIdentifier = "kCellIdentifier"
super.init()
}
第二部分
我已回答下面问题的第一部分,但我仍然不知道为什么以下解决方案不起作用?
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
cellIdentifier = "kCell"
tableView = UITableView()
super.init(nibName: nil, bundle: nil)
}
根据Swift的文档,“如果您的子类提供了其超类指定初始化器的所有实现——通过根据规则1继承它们,或通过在其定义中提供自定义实现——那么它会自动继承超类方便初始化器。” 在UIViewController中,init(nibName:bundle:)是唯一的指定初始化器,那我为什么没有自动继承init()和init(coder:)呢?