標籤: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的可選鏈,類型轉換和擴充