Swift的可選鏈,類型轉換和擴充

來源:互聯網
上載者:User

標籤:swift   ios   可選鏈   擴充   類型轉換   


可選鏈(Optional Chaining)
可選鏈是一種請求或調用屬性,方法,子指令碼的過程。可選性體現於請求或調用的目標當前可能為nil.若不為nil則成功調用,否則返回nil並將鏈失效。
調用可選鏈的返回結果與原結果類型相同,但是被封裝成為了一個可選類型Optional.


這裡由於roomCount返回為nil 所以執行else語句為count賦值為-1.
標註:在Beta3版本發布時對Swift稍微進行了修改,nil變成了關鍵字,而不再存在NilType的nil了。
可選鏈可以連續多層調用,假設例子:john.residence?.address?.street?.description()若有方法返回optional則?在括弧後面。

類型轉換
類型轉換是一種檢查執行個體類型的方式,也是讓執行個體作為父類或者子類的一種方式。在Swift中使用is或as來判斷和推斷他們是否為某個類或者某個協議。
is用於檢查一個執行個體是否屬於特定子類型,若果是則返回true不是則為false.注意這裡是特定子類型,如果你定義了一個類並執行個體化它,然後檢查它是否is這個類,編譯器會報錯告訴你這個is總是返回true.




向下轉型
因為向下轉型可能會失敗,類型轉換操作符會有兩種不同的形式。
as? 返回一個optional value,即不成功返回nil。as   則把向下轉型和強制解包結合,不成功則執行階段錯誤。


向下轉換和OC,Java中的強轉一樣,並沒有真正的改變執行個體,只是簡單的把它告訴編譯器當做這個類來使用而已。

Any和AnyObject
Swift中沒有像NSObject一樣的所有類基類。但有AnyObject可以表示任何class類型的執行個體。Any可以表示任何類型,除了方法類型。當需要使用CocoaAPIs,一般接收一個[AnyObject]的數組,因為oc中沒有明確類型的數組,其中儲存的指標可以指向任何類的執行個體。
使用Any類型來和混合的不同類型一起工作,包括非class.



巢狀型別
Swift中是支援巢狀型別的,就像支援嵌套函數一樣靈活。你可以在枚舉,類和結構體中定義支援嵌套的類型。

擴充(Extension)
擴充就是類似於Objective-C中的Category,不過Swift中的擴充沒有名字。
下面列舉Swift中的擴充可以做的事情:
--添加計算型屬性和計算靜態屬性--定義執行個體方法或類型方法--提供新的構造器--定義下標指令碼--定義和使用新的巢狀型別--使一個已有類型符合某個協議

文法
使用關鍵字extensionextension SomeType { ... }

適配協議:extension SomeType: SomeProtocol, AnotherProtocol { ... }也稱為在擴充中添加協議遵循者。
添加計算型屬性


注意:擴充可以添加新的計算型屬性,但是不能添加儲存型屬性,也不可以向已有屬性添加屬性觀測器。當然我們可以通過設定關聯引用的方式來添加一個“屬性”,需要用到Swift調用CPointer的知識以及objc/runtime的關聯引用,當然這也不是真正意義的屬性,而只是一個關聯。

構造器
擴充能向類中添加新的便利構造器,但不能添加新的指定構造器或者解構函式。若使用擴充提供了一個新的構造器,有責任保證構造過程中讓所有的執行個體都完全初始化。
方法


使用擴充為Int增加了一個方法,注意到這裡的..<取代了當初的.. 這是在beta3時蘋果對Swift文法做出的修改,主要是為了區分左閉右閉還是右開。
也可以在擴充中修改執行個體


下標指令碼


甚至還可以在擴充中增加巢狀型別。


範例程式碼請點擊這裡


以上就是本篇部落格全部內容,歡迎勘誤和討論。

Swift的可選鏈,類型轉換和擴充

相關文章

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.