Swift:必需增多init?(coder decoder: NSCoder)的开始和结果

金沙网址,当大家重写类的时候常常提示要增添代码:

 required init?(coder aDecoder: NSCoder) { fatalError("init has not been implemented") }

这个叫必备开头化器,这种情状相似会冒出在三翻五次了遵从NSCoding protocol的类,例如UIView类别的类、UIViewController类别的类。

缘何必须要抬高:这是NSCoding protocol定义的,遵守了NSCoding protoaol的全数类必得继续。只是一些情状会隐式承接,而部分意况下须要显示完毕。

哪些意况下要展现增添:当大家在子类定义了钦命早先化器(包罗自定义和重写父类钦定开头化器),那么必需出示落成required init?(coder aDecoder: NSCoder),而别的情形下则会隐式承袭,大家得以不用理会。

如何状态下会调用:当我们选拔storyboard完结分界面包车型大巴时候,程序会调用这一个起先化器。注意要去掉fatalErrorfatalError的乐趣是免费甘休执行并打印。在obj-c中得以因此上边代码达成

 NSException *exception = [NSException exceptionWithName:@"HotTeaException" reason:@"The tea is too hot" userInfo:nil]; @throw exception;

总结:设若代码完毕界面,那么大家假如依据编写翻译器提醒增添要求开头化器后,就无须理会,大家创立分界面包车型大巴劳作可以在自定义的起头化器里金镶玉裹福禄双全。

补充:let vc = UIViewController()办法伊始化类UIViewController类视乎独有三个开端化器,贰个是至关重要早先化器init?(coder aDecoder: NSCoder),叁个是点名初阶化器init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?),那么为何我们能够用let vc = UIViewController()这种方法开始化类呢?原因或然是以此最先化格局是发源uikit,相当于调用了Object-c下的UIViewController初叶化方法,是object-c
bridge过来的。

连锁链接:地址1 地址2

相关文章