自定義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()
}