【发布时间】:2023-03-30 20:25:01
【问题描述】:
也许只有我一个人,但我发现 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 处理这个问题,但以前从未注意到它。
我的问题如下:
- 是我做错了什么导致了这种行为吗?
- 除了继承之外,我还有什么方法可以避免重复自己吗?
- 是否有计划改变这种情况?
【问题讨论】:
标签: ios swift uiviewcontroller designated-initializer