Swfit--類型別名、布爾值、元組

類型別名 
類型別名(type aliases)就是給現有類型定義另一個名字。你可以使用 typealias 關鍵字來定義類型別名。 
  
當你想要給現有類型起一個更有意義的名字時,類型別名非常有用。假設你正在處理特定長度的外部資源的數據: 
1.  typealias AudioSample = UInt16  
定義了一個類型別名之後,你可以在任何使用原始名的地方使用別名: 
1.  var maxAmplitudeFound = AudioSample.min  
2.  // maxAmplitudeFound 現在是 0  
本例中,AudioSample 被定義爲 UInt16 的一個別名。因爲它是別名,AudioSample.min實際上是 UInt16.min,所以會給 maxAmplitudeFound 賦一個初值 0。 

布爾值 
Swift  有一個基本的布爾(Boolean)類型,叫做 Bool。布爾值指邏輯上的(logical),因爲它們只能是真或者假。Swift  有兩個布爾常量,true 和 false: 
1.  let orangesAreOrange = true  

2.  let turnipsAreDelicious = false  


orangesAreOrange 和turnipsAreDelicious的類型會被推測爲 Bool,因爲它們的初值是布爾字面量。就像之前提到的 Int 和 Double 一樣,如果你創建變量的時候給它們賦值 true或者 false,那你不需要將常量或者變量聲明爲 Bool 類型。初始化常量或者變量的時候如果所賦的值類型已知,就可以觸發類型推測,這讓  Swift  代碼更加簡潔並且可讀性更高。 
當你編寫條件語句比如 if 語句的時候,布爾值非常有用:  
1.  if turnipsAreDelicious {  
2.      println("Mmm, tasty turnips!")  
3.  } else {  
4.      println("Eww, turnips are horrible.")  
5.  }  
6.  // 輸出 "Eww, turnips are horrible."  
如果你在需要使用 Bool 類型的地方使用了非布爾值,Swift  的類型安全機制會報錯。下面的例子會報告一個編譯時錯誤:  
1.  let i = 1  
2.  if i {  
3.      // 這個例子不會通過編譯,會報錯  
4.  }  
然而,下面的例子是合法的: 
1.  let i = 1  
2.  if i == 1 {  
3.      // 這個例子會編譯成功  
4.  }  
i == 1 的比較結果是 Bool 類型,所以第二個例子可以通過類型檢查。類似 i == 1 這樣的比較,請參考基本操作符。  
和  Swift  中的其他類型安全的例子一樣,這個方法可以避免錯誤並保證這塊代碼的意圖總是清晰的。 

元組 
元組(tuples)把多個值組合成一個複合值。元組內的值可以使任意類型,並不要求是相同類型。 
  
下面這個例子中,(404, "Not Found")是一個描述 HTTP 狀態碼(HTTP status code)的元組。HTTP  狀態碼是當你請求網頁的時候  web 服務器返回的一個特殊值。如果你請求的網頁不存在就會返回一個 404 Not Found 狀態碼。 
1.  let http404Error = (404, "Not Found")  
2.  // http404Error 的類型是 (Int, String),值是 (404, "Not Found")  
(404, "Not Found")元組把一個 Int 值和一個 String 值組合起來表示 HTTP  狀態碼的兩個部分:一個數字和一個人類可讀的描述。這個元組可以被描述爲“一個類型爲(Int, String)的元組”。 
  
你可以把任意順序的類型組合成一個元組,這個元組可以包含所有類型。只要你想,你可以創建一個類型爲(Int, Int, Int)或者(String, Bool)或者其他任何你想要的組合的元組。 你可以將一個元組的內容分解(decompose)成單獨的常量和變量,然後你就可以正常使用它們了: 
1.  let (statusCode, statusMessage) = http404Error  

2.  println("The status code is \(statusCode)")  

3.  // 輸出 "The status code is 404"  
4.  println("The status message is \(statusMessage)")  
5.  // 輸出 "The status message is Not Found"   


如果你只需要一部分元組值,分解的時候可以把要忽略的部分用下劃線(_)標記: 
1.  let (justTheStatusCode, _) = http404Error  
2.  println("The status code is \(justTheStatusCode)")  

3.  // 輸出 "The status code is 404"

  

此外,你還可以通過下標來訪問元組中的單個元素,下標從零開始: 
1.  println("The status code is \(http404Error.0)")  
2.  // 輸出 "The status code is 404"  
3.  println("The status message is \(http404Error.1)")  

4.  // 輸出 "The status message is Not Found" 

  

你可以在定義元組的時候給單個元素命名: 
1.  let http200Status = (statusCode: 200, description: "OK")  
給元組中的元素命名後,你可以通過名字來獲取這些元素的值: 
1.  println("The status code is \(http200Status.statusCode)")  
2.  // 輸出 "The status code is 200"  
3.  println("The status message is \(http200Status.description)")  

4.  // 輸出 "The status message is OK" 

 

作爲函數返回值時,元組非常有用。一個用來獲取網頁的函數可能會返回一個(Int, String)元組來描述是否獲取成功。和只能返回一個類型的值比較起來,一個包含兩個不同類型值的元組可以讓函數的返回信息更有用。
注意:元組在臨時組織值的時候很有用,但是並不適合創建複雜的數據結構。如果你的數據結構並不是臨時使用,請使用類或者結構體而不是元組。

發佈了25 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章