class BorderedButton: UIButton {
// Some properties
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
self.themeBorderedButton()
}
override init(frame: CGRect) {
super.init(frame: frame)
self.themeBorderedButton()
}
func themeBorderedButton() {
//sets up the button
}
}
我一直在为我的项目阅读一些代码,但我遇到了这个问题。我已经阅读了Swift 2.0的初始化文档,我知道对于override init
我们只是从UIView
覆盖init,并且在我们以编程方式创建按钮时会调用此初始化程序。我们在故事板中创建按钮时调用required init
。
我的第一个问题是:
在代码中确切地指出了这个required init
,因为我查看了NSCoder的所有超类,并且没有一个方法具有required init
我的第二个问题是:
NSCoder究竟是什么阅读了文档,我粗略地了解它传输信息,但除此之外我还需要知道什么吗?在一个非平凡的应用程序中,类NSCoder
会被大量使用吗?
答案 0 :(得分:1)
UIView
符合NSCoding
协议,该协议需要init(coder:)
。
UIKit
使用NSCoder
加载视图,查看层次结构和查看故事板和XIB文件中定义的控制器。
NSCoder
是一种在iOS中存储和加载结构化数据的方案。它主要通过NSKeyedArchiver
和NSKeyedUnarchiver
使用。
除了上面提到的情况,我不建议在任何地方使用它,尤其是因为保持向后的comaptilbity变得更加困难与Swift。