swift UIViewController...重寫初始化

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

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 官方文檔 初始化 Initialization是為準備使用類,結構體或者枚舉實例的一個過程。這個過程涉及了在實例里...
    hrscy閱讀 1,148評論 0 1
  • 初始化 (Initialization) 自從蘋果2014年發布Swift,到現在已經兩年多了,而Swift也來到...
    Lebron_James閱讀 1,217評論 0 0
  • 原文地址:http://huizhao.win/2016/11/13/swift-init/ 從 Objectiv...
    趙大老板閱讀 34,517評論 11 121
  • 初始化(Initialization) 初始化是類、結構體、枚舉類型的準備過程。這個過程涉及到所有存儲屬性的初始化...
    泗哥閱讀 5,648評論 0 3
  • 倚欄望斷幾辛苦。把酒臨風,只待伊人顧。紅卻瑩楓滴玉露。落日孤燈珠簾幕。 雨罷風清星無數。拂云堆遠,易到傷心處。蕭蕭...
    落墨留香閱讀 460評論 0 3