關於Swift@IBOutlet連線產生的屬性系統自動解包問題

來源:互聯網
上載者:User

標籤:swift

關於連線拖出來的屬性後面預設帶歎號和為什麼我們一開始不需要給它賦值問題       @IBOutletweak var display: UILabel!        因為系統自動幫你初始化了,display是一個optional,並且在使用之前就賦了nil.對於optional後面一般不是問號嗎?但是對於實際類型而言它們沒有什麼區別.它仍然是一個optional的值,其值在這裡可能是一個UILabek類型.但是它們的用法完全是不一樣的,這完全是編譯器幫你把事做好了.但是我們把歎號改成問號,編譯器就會報出一些錯誤提示 Swift Compiler Error Value of optinal type ‘UILabel?’ not unwrapped; did you mean to user ‘!’ or ‘?’ ? ,比如對於display.text 就會提示說該對象沒有一個叫text的成員變數.就是說你不能給它發生text訊息.當然你可以在用的時候對其進行解包,比如: display!.text= digit 這中寫法也是正確的.但是要在每次用的時候都有對其解包.所以還是表變態的該系統產生的方法.sdisplay沒有在類最開始建立時初始化成nil.只有在xib被對應的viewController載入了.也就是連上線後,這個變數就會被設定並初始化,那麼它在整個類中就是永遠初始化過了.所以這些很早前就被設定過屬性變數不一定要和自己寫的屬性一樣在建立的時候初始化.並且它設定的時間非常早,之後一直保持著已設定狀態.所以這雖然是一個optional類型,但它會自動對變數解包.在某種情況下,你需要在UI載入之前擷取display,它會崩潰,因為它還沒有解包.這個就叫做 unwrapped optional

關於[email protected]連線產生的屬性系統自動解包問題

相關文章

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.