蘋果新的程式語言 Swift 語言進階(十二)--選項鍊
選項鍊是使用選項來查詢和呼叫其屬性、方法或下標的一個過程,如果選項包含一個值,則屬性、方法、下標的查詢和呼叫成功,否則,呼叫返回nil。
選項鍊能用在任何型別的選項來檢查對其一個屬性、方法、下標的查詢和呼叫是否成功。
選項鍊可以作為強制展開的替代方式使用,但選項鍊的使用更加安全,不會觸發一個執行時錯誤。
在呼叫一個選項的屬性、方法或下標方法時,通過在該選項值的後面放置一個(?)標記來規定一個選項鍊。這與在選項值後放置一個(!) 來強制展開選項的值非常相似。主要的不同是在選項值為nil時選項鍊能夠得體的失敗,不會觸發一個執行時錯誤。
選項鍊與Objective-C語言中的發訊息給nil類似,選項鍊能允許在一個nil值上進行屬性、方法、下標的呼叫和查詢。為了反應這個事實, 選項鍊的呼叫結果總是返回一個選項值,即使你查詢的屬性、方法、下標返回一個非選項值的情況。然後可以使用這個返回值來檢查選項鍊的呼叫是否成功。
尤其是選項鍊的返回結果除了被封裝為一個選項外與返回值的型別相同。如一個正常返回一個Int的屬性當使用 選項鍊來存取時返回一個整形選項(Int?)。
下面例子展示了選項鍊的使用:
classPerson {
var residence:Residence?
}
class Residence {
var rooms =Room[]()
var numberOfRooms:Int {
return rooms.count
}
subscript(i:Int) ->Room {
return rooms[i]
}
var address:Address?
}
class Room {
let name:String
init(name:String) {self.name =name }
}
class Address {
var buildingName:String?
var buildingNumber:String?
var street:String?
func buildingIdentifier() ->String? {
if buildingName {
return buildingName
}else if buildingNumber {
return buildingNumber
}else {
return nil
}
}
}
let john =Person()
if let roomCount =john.residence?.numberOfRooms {
println("John's residence has\(roomCount) room(s).")
}else {
println("Unable to retrieve the number of rooms.")
}
以上例子中john例項的屬性residence是一個選項,在沒有為john例項的屬性residence賦值時,執行else分支,如果john例項的屬性residence已經賦值,則執行if 分支。而無論哪種情況,程式碼都不會出現執行時錯誤。
多個選項鍊能連結到一起,如果鏈上的任何連結返回nil,則整個鏈失敗。這允許檢查和呼叫一個選項屬性的子屬性包含的屬性、方法、下標方法以及更深的呼叫。如下例子展示了多個選項鍊如何連結到一起。
if let johnsStreet = john.residence?.address?.street {
println("John's street name is\(johnsStreet).")
}else {
println("Unable to retrieve the address.")
}
下例展示如何通過選項鍊呼叫下標方法:
if let firstRoomName =john.residence?[0].name {
println("The first room name is\(firstRoomName).")
}else {
println("Unable to retrieve the first room name.")
}
下例展示如何通過選項鍊呼叫一個例項方法。
if let buildingIdentifier =john.residence?.address?.buildingIdentifier() {
println("John's building identifier is\(buildingIdentifier).")
}
由於Address例項方法buildingIdentifier返回的也是一個選項,因此還可以進一步連結。如下所示:
if let upper = john.residence?.address?.buildingIdentifier()?.uppercaseString {
println("John's uppercase building identifier is\(upper).")
}
相關文章
- 蘋果的新程式語言 Swift 簡介蘋果Swift
- swift語言新特性:可選值Swift
- 蘋果全新程式語言 Swift 迎來大幅更新,改進多項功能蘋果Swift
- 幼談蘋果新開發語言:Swift和蘋果的用心蘋果Swift
- Swift 新語言開發Swift
- Go語言核心36講(Go語言進階技術十二)--學習筆記Go筆記
- 易語言進階
- 淺談Swift程式語言Swift
- 蘋果Swift程式語言入門教程【中文版】蘋果Swift
- 關於c語言單項鍊表尾新增C語言
- 新程式語言選擇需謹慎
- 蘋果要用 Swift 語言顛覆傳統程式設計蘋果Swift程式設計
- 蘋果推出新部落格 宣傳全新程式語言Swift蘋果Swift
- Swift 程式語言入門教程Swift
- Go語言輕鬆進階Go
- 新程式語言誕生:Apple 發表以易用和速度為訴求的 Swift 語言APPSwift
- 15個快速學習蘋果Swift程式語言的入門教程蘋果Swift
- 蘋果新發布的程式語言雨燕怎麼樣?蘋果
- 選擇一門程式語言,任何一門語言
- Swift 語言基礎Swift
- 我不懂 Swift 語言Swift
- 由Swift程式語言說開去Swift
- win10語言首選項如何更改_如何改變win10的語言首選項Win10
- C語言進階[2]:字串常量C語言字串
- 程式設計師眼中的蘋果Swift語言:簡單 易學 高效程式設計師蘋果Swift
- 蘋果釋出 Swift 程式語言,支援程式碼效果實時預覽蘋果Swift
- “高階”的程式語言是否真的高階?
- 從高階語言到機器語言
- 把程式語言看做語言
- Swift多語言版本的建立Swift
- Swift 語言的字串與字元Swift字串字元
- Swift 語言的基本運算子Swift
- Hack:Facebook推出的新程式語言
- 蘋果推出全新的程式語言Swift,可實時預覽程式碼結果蘋果Swift
- Swift の 函數語言程式設計Swift函數程式設計
- Apple Swift程式語言入門教程APPSwift
- 最‘乾淨’的程式語言——空白程式語言
- 兒童程式語言的進化史