也许只有我一个人,但我发现 swift 的某些方面……至少可以说是迟钝的。
我大部分时间不使用 Interface Builder,因为我喜欢使用PureLayout
. 所以我希望创建一个UIViewController
子类,比如说PureViewController
,它有一个init
没有参数的方便:
class PureViewController : UIViewController {
init() {
super.init(nibName: nil, bundle: nil)
}
}
但这不行,因为 XCode 告诉我我还必须实现init(coder aDecoder: NSCoder)
. 好的,没关系!这就是我制作这个类的原因——所以我不必为子类再做一次。
class PureViewController : UIViewController {
init() {
super.init(nibName: nil, bundle: nil)
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
好的,现在这是我不明白的。
我定义了一个SomePureViewController : PureViewController
带有初始化器的子类init(viewModel:ICrackersViewModel)
...
class SomePureViewController : PureViewController {
init(viewModel:ICrackersViewModel) {
super.init()
}
}
但它仍然希望我定义相同的愚蠢初始化程序,直到王国来临!
class SomePureViewController : PureViewController {
init(viewModel:ICrackersViewModel) {
super.init()
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
现在我明白了这个想法 -init(decoder)
我的子类中没有,即使它是在其父类中定义的。
也许我一直在处理这个问题,UIViewController
但以前从未注意到它。
我的问题如下:
- 我做错了什么导致这种行为吗?
- 除了继承之外,有什么方法可以避免重复自己吗?
- 是否有计划改变这种情况?