iOS開發——錯誤總結篇&開發中常見錯誤和警告總結(三十二)

來源:互聯網
上載者:User

標籤:

開發中常見錯誤和警告總結(三十二)

百思不得姐Swift版經典錯誤

 

init method 關鍵知識點

問題描述:
fatal error: use of unimplemented initialer for class

如下:


代碼二:

 1 import UIKit 2 class ViewController:UIViewController{ 3     var data:String? 4  5     init(para:String){ 6         //那麼參數 放這裡初始化呢 self.data = para 7         super.init() 8         //還是放這裡初始化呢 self.data = para 9     }10     required init(coder aDecoder: NSCoder) {11         fatalError("init(coder:) has not been implemented")12     }13     override func viewDidLoad(){14         super.viewDidLoad()15     }16 }

 

儘管你有一個init(para:String)構造器,還有一個requried init(),但仍然不可避免運行時候報錯fatal error: use of unimplemented initialer init(nibName nibNameorNil:String?,bundle,nibBundleOrNil:NSBundle?) 類似這種

解決方案:

解決方案:

添加函數:

init(nibName nibNameorNil:String?,bundle,nibBundleOrNil:NSBundle?){    super.init(nibName:nibNameorNil,bundle:nibBundleOrNil)}

不只是解決方案!

這裡有個問題,也是前面代碼注釋中提到的,初始化參數放哪裡?你可以試試用let vc = ViewController(para:"Hello") 初始化一個ViewController,你會發現self.data = para放哪裡結果是不一樣的,放在super.init()前面初始化會最後變成nil,後面則不影響。
init()有個條例,先將本執行個體的屬性值都初始化,再添加上super.init(),假如你要修改父類的參數,再在之後賦值覆蓋掉!但是貌似和我們完全不同。其實你忽略了一個問題:

注意 我們調用了super.init() 而非super.init(nibName:nil,bundle:nil)

是的,問題的關鍵就是這裡。另外為什麼放在super.init()之後是沒有問題的呢?因為let vc = ViewController(para:"Hello")先跳入init(para:String)方法,執行到super.init()又會跳到init(nibName nibNameorNil:String?,bundle,nibBundleOrNil:NSBundle?)方法。執行完在跳回來。很有意思的東西 大家可以研究一下。

 

iOS開發——錯誤總結篇&開發中常見錯誤和警告總結(三十二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.