1. 程式人生 > >蘋果新的程式語言 Swift 語言進階(二)--基本資料型別

蘋果新的程式語言 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

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

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