自定义init初始化构造函数实现参数传递
对于UIKit框架类,不能像下面一样简单的重写:
```
import UIKit
class WebViewController:UIViewController{
var imageUrl:String!
init(imageUrl:String) {
self.imageUrl= imageUrl
}
```
required init?(coder aDecoder:NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override funcviewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor=UIColor.whiteColor()
}
这样编译器会报如下错误:
Super.initisn‘t called before returning from initializer
原因分析:
1,在Swift中,类的初始化器有两种,分别是Designated Initializer(指定初始化器)和Convenience Initializer(便利初始化器)
2,如果子类没有定义任何的指定初始化器,那么会默认继承所有来自父类的指定初始化器。
3,如果子类提供了所有父类指定初始化器的实现,那么自动继承父类的便利初始化器
4,如果子类只实现部分父类初始化器,那么父类其他的指定初始化器和便利初始化器都不会继承。
5,子类的指定初始化器必须要调用父类合适的指定初始化器。
错误分析:指定构造器必须调用它最近父类的指定构造器。
正确的写法:
import UIKit
class WebViewController:UIViewController{
var imageUrl:String!
init(imageUrl:String) {
super.init(nibName:nil, bundle:nil)
self.imageUrl= imageUrl
}
required init?(coder aDecoder:NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override funcviewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor=UIColor.whiteColor()
}