元組(Tuples):
定義:元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值兼都。元組內(nèi)的值可以是任意類型,并不要求是相同類型漂羊。
用途:可以把多個(gè)值組成一個(gè)復(fù)合值,作為函數(shù)的參數(shù)或返回值使用時(shí)侣背,非常方便白华。
用法:
組合:
let http404Error = (404, "Not Found")
print(http404Error)
// http404Error的類型是:(Int, String),值是(404, "Not Found")
分解:
let (statusCode, statusMessage) = http404Error
print("statusCode = \(statusCode), statusMessage = \(statusMessage)")
其他:
如果只需要一分部元組值,分解時(shí)可以把忽略的部分用下劃線(_)標(biāo)記:
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// 輸出 "The status code is 404"
可以通過下標(biāo)來訪問元組中的單個(gè)元素贩耐,下標(biāo)從0開始:
print("The status code is \(http404Error.0)")
// 輸出 "The status code is 404"
print("The status message is \(http404Error.1)")
// 輸出 "The status message is Not Found"
你可以在定義元組的時(shí)候給單個(gè)元素命名:
let http200Status = (statusCode: 200, description: "OK")
給元組中的元素命名后,你可以通過名字來獲取這些元素的值:
print("The status code is \(http200Status.statusCode)")
// 輸出 "The status code is 200"
print("The status message is \(http200Status.description)") // 輸出 "The status message is OK"
可選類型(Optionals):
用途:用于處理值可能缺失的情況弧腥。
可選表示:有值,等于x 或 沒有值
nil :
可以給可選變量賦值為nil來表示它沒有值:
例:
var serviceResponseCode: Int? = 404 // 打印結(jié)果是一個(gè)可選的Int值:404
serverResponseCode = nil // 打印結(jié)果為nil,即不包含值
注意:
nil不能用于非可選的常量和變量潮太。如果代碼中由于常量或變量需要處理值缺失的情況管搪,請(qǐng)把它們聲明成對(duì)應(yīng)的可選類型
如果聲明了一個(gè)可選常量或變量但是沒有賦值,它們會(huì)自動(dòng)被設(shè)置為nil:
例:
var surveyAnswer: String? // 打印結(jié)果為nil, 即被自動(dòng)設(shè)置為nil
var numberAnswer: Int? // 打印結(jié)果同上
注意:
Swift和Objective-C的nil并不一樣铡买。
在Objective-C中更鲁,nil指向一個(gè)不存在對(duì)象的指針。
在Swift中奇钞,nil不是指針澡为,是一個(gè)確定的值,用來表示值確實(shí)(任何類型的可選狀態(tài)都可以被設(shè)置為nil),不只是對(duì)象
if語句以及強(qiáng)制解析
可選值得強(qiáng)制解析:當(dāng)確定可選類型確實(shí)包含值之后景埃,在可選值的名字后面加一個(gè)感嘆號(hào)(!)
來獲取值媒至,這被稱為可選值得強(qiáng)制解析
例:
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推測(cè)為類型 "Int?", 或者類型 "optional Int"
if convertedNumber != nil {
print("convertedNumber contains some integer value of \(convertedNumber!).")
//不等于nil說明有值,強(qiáng)制解析
}
注意:使用!來獲取一個(gè)不存在的可選值會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤纠亚。因此,在使用!強(qiáng)制解析值之前筋夏,一定要確定可選包含一個(gè)非nil得值
可選綁定
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
理解:
如果Int(possibleNumber)返回的可選Int包含一個(gè)值蒂胞,創(chuàng)建一個(gè)叫做actualNumber的心常量并將可選值賦給它
用法:
可以在可選綁定中使用常量或變量,如果想在第一分支中操作actualNumber,可改成變量
if var actualNumber1 = Int(possibleNumber) {
actualNumber1 = 100
print("\'\(possibleNumber)\' has an integer value of \(actualNumber1)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
可以包含多個(gè)可選綁定在if語句中条篷,并使用where子句做布爾值判斷
if let firstNumber = Int("4"), secondNumber = Int("42") where firstNumber < secondNumber {
print("\(firstNumber) < \(secondNumber)")
} // prints "4 < 42"
隱式解析可選類型
用途:
有時(shí)候在程序中骗随,第一次被賦值之后蛤织,可以確定一個(gè)可選類型總會(huì)有值。這種類型的可選狀態(tài)被定義為隱式解析可選類型鸿染。(把想要用做可選類型的后面的問號(hào)改成感嘆號(hào)指蚜,來聲明一個(gè)隱式解析可選類型)
例:
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! //每次都需要感嘆號(hào)(!)獲取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感嘆號(hào)
仍然可以把隱式解析可選類型當(dāng)做普通可選類型來判斷是否包含值:
if (possibleString != nil) {
print(possibleString)
}
也可以在可選綁定中使用隱式解析可選類型來檢查并解析它的值:
if let definiteString = assumedString {
print(definiteString)
}