Swift裏的元組和可選類型

元組(Tuples)

元組將多個值分組爲一個複合值,元祖中的值可以是任何類型,而不比彼此相通。

定義一個元組

例:

let httpStatus = (statusCode: 200, description: "ok")

讀取數據:

if httpStatus.statusCode == 200 {
// ...
}

元組作爲函數的返回值

使用元組作爲返回值,可以返回多個返回值,而且返回的多個值的類型不受限制。

元組作爲函數的返回值,在接收端需要知道元組的每個元素的類型,從而不至於取值出錯。

元組的適用範圍

注意:元組適用於簡單的一組數據,如果數據結構比較多,太過複雜的話,不建議使用元組,這時候使用類或者結構體來定義複雜的數據結構。

可選類型(Optionals)

在Objective-C中接觸過Option,Swift中的Optionals好像和OC中的不太一樣。

在Swift中的Optional,適用於缺省值的情況下。

Optional和Option還不是一個東西,Swift中的可選這個概念在C和OC中是沒有的。在OC中與Swift的Optional比較相近的概念是將nil作爲返回值。返回nil,表示沒有有效的對象,nil只適用於對象,不適用於基本的數據結構或者枚舉,基本數據返回nil時,往往會返回的是0。對於這些類型,在OC中一般是返回一個特定的值,例如枚舉的話我們默認返回0,定義爲xxxdefault、xxxNone等。

定義可選類型

let number : int ?

在數據類型後面添加一個問號,表示這是一個可選值類型。可能是int,也可能不是。

示例分析

let result: Int? = 30
print(result)

上面的代碼,編譯後會報如下警告:
Expression implicitly coerced from ‘Int?’ to ‘Any’
Provide a default value to avoid this warning
Force-unwrap the value to avoid this warning
Explicitly cast to ‘Any’ with ‘as Any’ to silence this warning

原因是編譯器不知道result這個值到底是什麼,因爲它是一個可選類型。

系統給提供了三個處理警告的辦法,點擊fix即可

  1. 添加一個默認值
let result: Int? = 10
print(result ?? 0)

如果有值則是該值,如果沒值,result是0。

  1. unwrap解包裝
let result: Int? = 10
print(result!)

這種情況需要注意,當result被賦值爲nil的時候,會閃退。

這裏有一個問題就是 感嘆號 在這裏的作用。

let result: Int? = 10
print(result as Any)

這種做法個人感覺是比較好的,當result有值時就是被賦予的值,如果沒值時候就是nil,也不會閃退。

Optional中使用nil

var serverResponseCode: Int? = 404

// serverResponseCode contains an actual Int value of 404

serverResponseCode = nil

// serverResponseCode now contains no value

注意:
Swift中的nil與OC中的nil不一樣。OC中nil是指向不存在的對象的指針。在Swift中nil不是指針,是缺少某種類型的值,可以將任何類型的Optionals這是爲nil,而不僅僅是對象類型。

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