也许只是我,但是我发现某些方面迅捷...至少可以说是令人困惑。
我通常不使用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() } }
但是它STILL
class SomePureViewController : PureViewController { init(viewModel:ICrackersViewModel) { super.init() } required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } }
现在,我明白了这个想法-即使在其父类中定义了
init(decoder)
,我的子类中也没有。
也许我一直用UIViewController
处理此问题,但以前从未注意到它。
我的问题如下:
也许只是我,但我发现某些方面很快……至少可以说是钝头。我大部分时间都不使用Interface Builder,因为我喜欢使用PureLayout。所以我希望做一个...
重点是,只要知道基本类型就可以初始化可能派生的类。
我认为这是一个迅速的问题,没有办法避免这种情况。我们都讨厌这个空的-致命错误初始化器。
由于初始化程序标记有required
关键字,所有子类都必须实现该初始化程序,并且它们还必须在其实现中指定required
,以便也需要their
你们是否找到了使用Storyboard避免此错误并初始化可编码结构的最佳方法? Xcode需要编写此行,并且在运行应用程序时会崩溃: