空合運算子( a ?? b )將對可選型別 a 進⾏空判斷,如果 a 包含乙個值就進⾏解包,否則就返回乙個預設值b 。表示式 a 必須是
optional 型別。預設值 b 的型別必須要和 a 儲存值的型別保持一致。
空合運算子是對以下**的簡短表達方法:
a != nil ? a! : b
上述**使用了三元運算子。當可選型別 a 的值不為空時,進⾏強制解封( a! ),訪問 a 中的值;反之返回預設值 b 。無疑空合運
算符( ?? )提供了一種更為優雅的⽅式去封裝條件判斷和解封兩種⾏為,顯得簡潔以及更具可讀性。
如果 a 為非空值( non-nil ),那麼值 b 將不會被計算。這也就是所謂的短路求值。
下文例子採⽤空合運算子,實現了在預設顏色名和可選自定義顏色名之間抉擇:
let defaultcolorname = "red"
var userdefinedcolorname: string? //預設值為 nil
var colornametouse = userdefinedcolorname ?? defaultcolorname
// userdefinedcolorname 的值為空,所以 colornametouse 的值為 "red"
userdefinedcolorname 變量被定義為乙個可選的 string 型別,預設值為 nil 。由於userdefinedcolorname 是乙個可選型別,我
們可以使用空合運算子去判斷其值。在上乙個例子中,通過空合運算子為乙個名為 colornametouse 的變量賦予乙個字元串型別
初始值。 由於 userdefinedcolorname 值為空,因此表示式userdefinedcolorname ?? defaultcolorname 返回
defaultcolorname 的值,即 red 。 如果你分配乙個非空值( non-nil )給 userdefinedcolorname ,再次執⾏空合運算,運算結果
為封包在userdefaultcolorname 中的值,⽽⾮預設值。
userdefinedcolorname = "green"
colornametouse = userdefinedcolorname ?? defaultcolorname
// userdefinedcolorname ⾮空,因此 colornametouse 的值為 "green"
swift 提供了幾種方便表達乙個區間的值的區間運算子。
閉區間運算子( a...b )定義乙個包含從 a 到 b (包括 a 和 b )的所有值的區間。 a 的值不能超過 b 。閉區間運算子在迭代乙個區間
的所有值時是非常有用的,如在 for-in 迴圈中:
for index in 1...5 else else else else {
print("access denied")
// 輸出「welcome!」
這括號使得前兩個值被看成整個邏輯表達中獨⽴的乙個部分。雖然有括號和沒括號的輸出結果是一樣的,但對於讀**的人來說
有括號的**更清晰。可讀性比簡潔性更重要,請在可以讓你**變清晰的地方加個括號吧!
基本運算子 Swift學習筆記(五)
注 本文為自己學習the swift programming language的筆記,其中的例子為引用原書和其他博文或自己原創的。每個例子都會批註一些實踐過程中的經驗或思考總結。1.術語 swift的運算子分為一元 二元和三元。一元運算子 字首一元運算子 正號,負號,取反,字首加,字首減等,和字尾一...
Swift學習筆記(4) 基本運算子
由於其他語言中也有一樣的運算子,我把需要注意的和不太一樣的列了出來,其他相同的就不再贅述。例子 9 4 等於 1 9 4 等於 1在對負數 b求余時,b 的符號會被忽略。這意味著 a b 和 a b 的結果是相同的。復合賦值運算沒有返回值,let b a 2這類 是錯誤。這不同於上面提到的自增和自減...
Swift 基本運算子
1,zebra 2 true,因為 1 小於 2 3 3 bird 4,dog 4,dog true,因為 4 等於 4,dog 等於 dog blue 1 purple 1 true blue false purple true 錯誤,因為 不能比較布林型別注意 1.bool 不能被比較,也意味著...