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

來源:互聯網
上載者:User

標籤:int   定義   初始化   知識   toc   技術   ...   示範   蘋果   


可選鏈(Optional Chaining)
可選鏈是一種請求或調用屬性。方法,子指令碼的過程。可選性體現於請求或調用的目標當前可能為nil.若不為nil則成功調用。否則返回nil並將鏈失效。


調用可選鏈的返回結果與原結果類型同樣,可是被封裝成為了一個可選類型Optional.


這裡因為roomCount返回為nil 所以運行else語句為count賦值為-1.
標註:在Beta3版本號碼公布時對Swift略微進行了改動,nil變成了keyword,而不再存在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中的擴充能夠做的事情:
--加入計算型屬性和計算靜態屬性--定義執行個體方法或類型方法--提供新的構造器--定義下標指令碼--定義和使用新的巢狀型別--使一個已有類型符合某個協議

文法
使用keywordextensionextension 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.