close

Swift支援了一個特別的方法,叫"Tuples"。中譯為"變數值組",就是各種變數的組合包。他可以將各種型態包在一個變數/常數裡,如:

let http404Error = (404, "Not Found")

上例可看到,我們將一個整數及一個字串包起來放到http404Error這個常數裡,可以看成http404Error的型態是(Int, String)。

而當我們要將Tuples分開接起來的時候,就反過來寫:

let (statusCode, statusMsg) = http404Error

此時statusCode的型態就是Int,值為404;statusMsg型態為字串,值為Not Found。

 

若是我們接起來的時候只不需要全部的東西,我們可以將不需要的值用"_"取代,如:

let (statusCode, _) = http404Error

 

以上是把原Tuples接起來的方式,而我們也可以直接將值取出,如:

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

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

取值時,將他當成陣列,從第零個開始拿;在Xcode裡,我們只要一打.,後面會立即跳出他裡面所包的內容,並提醒大家各個內容所對應的型態。

 

除了使用順序來取值,在一開始宣告時,我們也可以自己幫tuples的內容物取名字,如:

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

 

這樣我們取值時,會清楚知道拿到的是什麼東西,而不只是一個順序:

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

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

當然,以上http200Status的例子,也可以用http200Status.0來取值。

 

Tuples在function會是非常好用的一個設定,因大多數的程式語言都只能回傳單一物件,因此若想一次回傳多筆資訊時就只能自己創一個類別來包含需要回傳的東西;以今天這個例子來看,http status是現今web很常使用的東西,如有tuples我們可以更快更方便的存取這些資訊而不必再另外做處理。

 

另一個特別的東西是,Optionals。他的用途在於判斷變數的值有可能會是沒有的,即:變數有值,且為XXX,或是變數沒有值。

例如,Swift內建可將String轉成Int:

let maybeANumber = "123"

let convertedNum = maybeANumber.toInt()

toInt是String內建轉Int的方法,但實際上字串不一定可以轉成整數,因此在上例來看,convertNum的型態為optional Int,而不是Int。所有的型態都可以在後面加問號變成optional,如String? 即為optional String。

當型態為optional時,這個變數就可能為空值,即nil;反之,若非optinal時,則不可為空值,否則會出錯,如:

var myString:String? = "111"

myString = nil

這樣執行是可行的,若是:

 

var myString:String = "111"

myString = nil

就會產生錯誤。

 

optional也可在變數無初始值宣告時使用,如:

var myString:String?

他的初始值當然就是nil了。

 

在判斷式中,我們可以依有沒有值來做處理,如上述字串轉整數的例子:

if convertedNum != nil {

    //表示轉換成功,maybeANumber確是整數型態的數字。

}

 

而當我們百分之百確定optional是有值的時候,我們可以在變數名後面加驚嘆號來結束option的型態,如:

if convertedNum != nil {

    //表示轉換成功,maybeANumber確是整數型態的數字。

    print(convertNum!)

}

這邊要注意的是,若convertNum為nil,而我們又以為有值而加了驚嘆號來取消optional,這時候就會出問題了,因此使用上要小心。

arrow
arrow
    全站熱搜

    Eason 發表在 痞客邦 留言(0) 人氣()