蘋果新的編程語言 Swift 語言進階(二)--基本數據類型

  

       一  、   常量和變量

                   Swift語言 對常量和變量的聲明進行了明確的區分

         Swift語言的常量類型比C 語言的constants類型更加強大,語義更加明確。

         常量和變量的區別是常量在設置或初始化後其值不允許改變,而變量允許,除此之外,Swift語言中變量類型能使用的地方,常量類型也同樣能使用,如作爲輸入參數等

         Swift語言中常量類型使用let 關鍵字進行聲明,變量類型使用var 關鍵字進行聲明,如

                                let maximumNumberOfLoginAttempts =10
               var currentLoginAttempt =0

         以上語句聲明瞭一個名字爲maximumNumberOfLoginAttempts的常量,其值爲10;接着又聲明瞭一個名字爲currentLoginAttempt的變量,其初始值爲0。

         如果一行中只有一條語句,語句最後就不需要帶分號,如果一行中帶有多條語句,語句之間就需要加分號,而最後一條不需要,這也體現和反應了Swift語言語法設計簡潔和明確的思想。如以下語句所示:

 let cat = ""; println(cat)


         在Swift中常量和變量可以是任何類型。當聲明一個常量或一個變量時,你可以爲其提供一個類型標識,來清楚表示該常量或變量的類型。            聲明語法是在常量和變量名字後面跟着一個冒號,接着跟着類型的名字。如下所示聲明瞭一個類型爲字符串類型(String)名字爲welcomeMessage的變量。

 var welcomeMessage: String


 在作了以上聲明後,welcomeMessage變量就可以設置爲任何字符串值,如:

  welcomeMessage = “Hello"


   實際上你很少需要爲一個變量聲明或常量聲明指定類型。如上面的對maximumNumberOfLoginAttempts常量和currentLoginAttempt變量的聲明,Swift編譯器能夠根據聲明中提供的初始值自動推斷其爲Int類型。

  如下語句Swift推斷你想創建一個Double類型的常量。

  let pi =3.14159

  因次當你定義一個常量或變量時爲其提供了一個初始值,就不再需要另外爲其指定類型,Swift編譯器可以從中推斷出其類型。

   二、多樣化的數字表示。

  Swift支持以8位、16位、32, 和64 位形式來表達一個有符號和無符號形式的整數類型。整數類型的命名遵從和C語言相似的約定,如UInt8代表一個8位無符號整數,Int32代表一個32位有符號整數,Swift建議你通常使用Swift定義的一個位數和和當前平臺的本地字大小相同的Int整數類型,這樣可以保持代碼的一致性和互操作性,避免了不同整數類型之間的相互轉換。

  Swift中整型常量數字的表達可以使用十進制、二進制、八進制、十六進制等多種形式: 

let decimalInteger = 17        //十進制表達(沒有前綴)

let binaryInteger = 0b10001       // 二進制表達(0b開頭)

let octalInteger = 0o21           // 八進制表達(0o開頭)

let hexadecimalInteger = 0x11     // 十六進制表達(0x開頭)

Swift也提供Double(64位)和Float(32位)兩種形式的浮點數支持。

Swift中,浮點數常量數字的表達支持十進制(沒有前綴)或十六進制(0x開頭)兩種形式,並支持不同的指數形式。如下所示:

1.25e2 means 1.25 × 102, or125.0十進制表達形式(不帶前綴,指數用大小寫的e來指示)

 0xFp2 means 15 × 22, or60.0.    六進製表達形式(以0x開頭,指數用大小寫的p來指示)

Swift中,爲了使數字表達更加易讀和自然,數字表達格式還能包含額外的信息,如整數和浮點數都能在前面添加額外的0以及在數字之間包含下劃線。如下所示:

let paddedDouble = 000123.456

let oneMillion = 1_000_000

let justOverOneMillion = 1_000_000.000_000_1

        

    三、 多元組


     多元組(Tuples)是Swift語言提供的一種新的數據類型,是一種多個數值的組合。一個多元組可以是任意類型甚至是不同類型數值的組合。
     如下所示:

  let http404Error = (404,"Not Found")

該例子定義了一個描述HTTP狀態碼的多元組常量http404Error,該常量的類型爲(Int, String)的多元組類型,其值爲(404, "Not Found")。該多元組表示了一個整數和一個字符串的組合。

當使用時,你可以從多元組中分解出每個分離的值。如下語句所示:

let (statusCode,statusMessage) =http404Error

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

// prints "The status code is 404"

println("The status message is\(statusMessage)")

// prints "The status message is Not Found"


當你僅需要多元組的部分值時,可以使用符合‘_’來指示忽略的其它項:

let (justTheStatusCode,_) =http404Error

println("The status code is\(justTheStatusCode)")

// prints "The status code is 404"

另外還可以使用索引來存取一個多元組中的每個獨立的項:

println("The status code is\(http404Error.0)")

// prints "The status code is 404"

println("The status message is\(http404Error.1)")

// prints "The status message is Not Found"

當多元組定義時你還可以爲多元組中的每一個獨立項命名:

 let http200Status = (statusCode:200,description:“OK")

然後你可以使用命名的元素名來存取這些元素的值: 

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

// prints "The status code is 200"

println("The status message is\(http200Status.description)")

// prints "The status message is OK”


多元組主要用於函數的返回值,如果一個函數需要返回多個值,如一個函數需要返回上面描述的HTTP狀態碼,就可以定義和返回一個上面描述的的多元組。

多元組類型提供了一種簡潔的方式使一個函數可以返回多個不同類型的返回值。

多元組適合於創建相關值的臨時組合,而不適合於創建複雜的數據結構。


四 、選項類型:


 選項類型是Swift語言提供的又一種強大的新的數據類型,用來表達一個可能存在也可能不存在的值類型。

      與選項類型能力最接近的是Objective-C語言中的一個可能返回一個對象,也可能返回一個nil的方法的使用。在Objective-C語言中nil意味着一個有效對象的不存在,但在Objective-C語言中nil僅能夠工作於對象,而不能工作於結構以及其它基本C類型或者枚舉類型。 對於這些類型值的不存在Objective-C語言用一個NSNotFound特殊值表示。

      而Swift的選項類型可以指示任何類型值的不存在,而不需要另外定義任何其它特殊值。

          如一個字符串類型可以使用其方法toInt來轉換一個字符串的值爲一個整數,可是,不是每一個字符串都能夠轉換爲一個整數。如含有數字的字符串如"123" 可以進行轉換,而不含數字的字符串如"hello, world" 則不能轉換。這種情況如果使用選項類型就非常有用。

 如例子:

  let possibleNumber ="123"

 let convertedNumber =possibleNumber.toInt()

      由於toInt方法可能失敗,因此編譯器推斷possibleNumber.toInt()返回的是一個optional Int類型。一個 optional Int 類型在語法上寫作:Int?。選項類型的變量或常量指示該常量或變量允許沒有值。

       ‘?’標識符指示該值是一個選項類型,意味着該類型值可以包含有效的整數值,也可能什麼值也沒有包含。

        Swift中你可以使用if語句來判斷一個選項是否包含一個值。如果一個選項包含一個值,它被評估爲true,否則評估爲false。如果使用if語句評估一個選項包含了一個值,然後就能夠在選項名字後面添加一個!來獲取該選項的值。這在Swift語言中稱作選項值的強制展開。

   如下例子展示瞭如何強制展開一個選項值:

 ifconvertedNumber{

   println("\(possibleNumber) has an integer value of \(convertedNumber!)")

}else {

   println("\(possibleNumber) could not be converted to an integer")

}

   需要強調的是,如果試圖使用!來存取一個不存在的選項值會觸發一個運行時錯誤,因此在使用!來存取選項值之前應該總是確保該選項值包含一個有效值,或者採用上面的方式進行判斷。


   Swift中你還能夠使用選項綁定來判斷一個選項是否包含一個有效值。選項綁定作爲if 或while語句的判斷語句使用,在判斷語句中先取出選項中的值並賦值給一個常量或變量,然後使用該常量或變量來檢查和使用該選項中的值。

        如下例子展示瞭如何使用選項綁定來使用一個選項中的值。

      

   ifletactualNumber = possibleNumber.toInt() {

   println("\(possibleNumber) has an integer value of \(actualNumber)")

}else {

   println("\(possibleNumber) could not be converted to an integer")

}

   你可以通過爲一個選項變量賦值爲nil,來設置該選項變量爲一個無值的狀態:

      var serverResponseCode: Int? = 404

     選項變量serverResponseCode 包含一個實際的整數值404.

     serverResponseCode = nil

     現在serverResponseCode不包含值。

    如果你定義一個選項常量或變量,但沒有爲其提供默認值,該常量或變量自動被設置爲nil。

    nil在Objective-C是一個代表不存在對象的指針,而在Swift中它代表一個確定類型值的不存在,並且在Swift中任意類型 的選項都可以設置爲nil,而不僅僅是對象類型。
      

    一個選項類型在首次設置時,如果爲其設置了一個有效值,由於這時選項類型的值程序是清楚的,並且如果在此後使用該選項的每個地方也能夠確信該選項的值存在,這種類型的選項就可以定義爲一個稱爲隱含的已展開的選項。

         一個隱含的已展開的選項在使用時不再需要使用條件語句來檢查以及使用強制展開或選項綁定來取出選項中的值。

         你在選項類型的常量或變量後面放置一個‘!’符號標識來指示該選項是一個隱含的已展開的選項。

         隱含的已展開的選項通常在類的初始化期間使用。

    如下展示瞭如何定義一個隱含的已展開的選項及如何使用它:

letassumedString:String! ="An implicitly unwrapped optional string."

println(assumedString)  

   // no exclamation mark is needed to access its value

    當然需要注意的是如果試圖存取一個不包含值的隱含的已展開的選項,仍然會觸發一個運行時錯誤。


                                        版權所有,請轉載時註明鏈接和出處,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章