- 1 . 賦值運算符
- 1.1 賦值運算
let b = 10
var a = 5
a = b
// a is now equal to 10
- 1.2 賦值多元組
如下,如果賦值的右邊是一個多元組,它的元素可以馬上被分解成多個常量或變量
let (x, y) = (1, 2)
// x is equal to 1, and y is equal to 2
- 1.3 賦值操作并不返回任何值
與 C 語言和 Objective-C 不同捺疼,Swift 的賦值操作并不返回任何值余寥。所以以下代碼是錯誤的,官方說法是這個特性使你無法把(==)錯寫成(=),因為
if x = y
是錯誤代碼帝蒿,Swift 能幫你避免此類錯誤發(fā)生荐糜。
if x = y {
// This is not valid, because x = y does not return a value.
}
- 2 .算術(shù)運算符
- 2.1 加、減葛超、乘暴氏、除
基本運算沒什么特別的,不過加法運算符可用于 String 的拼接了
"hello, " + "world" // equals "hello, world"
- 3 .求余運算符
- 3.1 整數(shù)求余绣张,浮點數(shù)是不可以的
9 % 4 // 被2整除得到 1
-9 % 4 // 被-2整除得到 -1
- 3.2 對負(fù)數(shù)求余時答渔,符號會被忽略
9 % -4 // 等價 9 % 4 被2整除得到 1
-9 % -4 // 等價 -9 % 4 被-2整除得到 1
- 4 .一元運算符
-
+
- 4.1 一元負(fù)號運算符
-
- 4.1 一元負(fù)號運算符
在數(shù)值前面加
-
,注意一元負(fù)號-
寫在操作數(shù)之前侥涵,中間沒有空格沼撕。
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
- 4.2 一元正號運算符
+
- 4.2 一元正號運算符
對變操作數(shù)沒任何影響,官方的意思是如果你加了
+
會與-
產(chǎn)生對稱美芜飘。
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6
- 5 .組合賦值運算符
表達(dá)式 a += 2 是 a = a + 2 的簡寫
var a = 1
a += 2
// a is now equal to 3
復(fù)合賦值運算沒有返回值务豺,
let b = a += 2
這類代碼是錯誤
- 6 .比較運算符
- 6.1 普通比較
等于(a == b)
不等于(a != b)
大于(a > b)
小于(a < b)
大于或等于(a >= b)
小于或等于(a <= b)
1 == 1 // true because 1 is equal to 1
2 != 1 // true because 2 is not equal to 1
2 > 1 // true because 2 is greater than 1
1 < 2 // true because 1 is less than 2
1 >= 1 // true because 1 is greater than or equal to 1
2 <= 1 // false because 2 is not less than or equal to 1
比較運算符常用于 if 語句
let name = "world"
if name == "world" {
print("hello, world")
} else {
print("I'm sorry \\(name), but I don't recognize you")
}
// Prints "hello, world", because name is indeed equal to "world".
- 6.2 元祖比較(7個元素以內(nèi))
當(dāng)元組中的值可以比較時,你也可以使用這些運算符來比較它們的大小嗦明。例如笼沥,因為 Int 和 String 類型的值可以比較,所以類型為 (Int, String) 的元組也可以被比較娶牌。相反奔浅,Bool 不能被比較,也意味著存有布爾類型的元組不能被比較裙戏。
比較元組大小會按照從左到右乘凸、逐值比較的方式,直到發(fā)現(xiàn)有兩個值不等時停止累榜。如果所有的值都相等营勤,那么這一對元組我們就稱它們是相等的灵嫌。但是,元祖里的數(shù)據(jù)不能超過7個葛作,Swift 標(biāo)準(zhǔn)庫只能比較七個以內(nèi)元素的元組寿羞。
(1, "zebra") < (2, "apple") // true because 1 is less than 2
(3, "apple") < (3, "bird") // true because 3 is equal to 3, and "apple" is less than "bird"
(4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"
- 7 .三目運算符
普通代碼
if question {
answer1
} else {
answer2
}
三目運算符
question ? answer1 : answer2
綜上:可讀性還是簡潔性,請開發(fā)者自己斟酌
- 8 .空合運算符
空合運算符(a ?? b)將對可選類型 a 進(jìn)行空判斷赂蠢,如果 a 包含一個值就進(jìn)行解封绪穆,否則就返回一個默認(rèn)值 b。表達(dá)式 a 必須是 Optional 類型虱岂。默認(rèn)值 b 的類型必須要和 a 存儲值的類型保持一致玖院。
a ?? b
用三目表達(dá)式表示為:a != nil ? a! : b
let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"
userDefinedColorName
為Optional類型,userDefinedColorName ?? defaultColorName
解封userDefinedColorName
為nil
,所以返回默認(rèn)值defaultColorName
- 9 .區(qū)間運算符
- 9.1 閉區(qū)間運算符
閉區(qū)間運算符
(a...b)
定義一個包含從 a 到 b(包括 a 和 b)的所有值的區(qū)間第岖。
for index in 1...5 {
print("\\(index) times 5 is \\(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
- 9.2 半開區(qū)間運算符
半開區(qū)間
(a..<b)
定義一個從 a 到 b **(不包括 b) **的區(qū)間难菌。
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("第 \\(i + 1) 個人叫 \\(names[i])")
}
// 第 1 個人叫 Anna
// 第 2 個人叫 Alex
// 第 3 個人叫 Brian
// 第 4 個人叫 Jack
- 10 .邏輯運算
- 10.1 邏輯非
邏輯非運算(!a)對一個布爾值取反,使得 true 變 false蔑滓,false 變 true郊酒。它是一個前置運算符,需緊跟在操作數(shù)之前键袱,且不加空格燎窘。
let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
- 10.2 邏輯與
邏輯與(a && b)表達(dá)了只有 a 和 b 的值都為 true 時,整個表達(dá)式的值才會是 true蹄咖。只要任意一個值為 false褐健,整個表達(dá)式的值就為 false。事實上比藻,如果第一個值為 false铝量,那么是不去計算第二個值的。
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
在上面的例子中enteredDoorCode = true
,enteredDoorCode && passedRetinaScan
會繼續(xù)判斷passedRetinaScan
银亲,因為passedRetinaScan = false
慢叨,所以走 else 。
- 10.3 邏輯或
邏輯或(a || b)是一個由兩個連續(xù)的 | 組成的中置運算符务蝠。a和b只要其中一個為true就為true拍谐,只有兩個為false的時候才是false。
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
上述代碼中hasDoorKey || knowsOverridePassword
中knowsOverridePassword = true
所以表達(dá)式為true馏段。
- 10.4 邏輯運算符組合計算
將上述的簡單邏輯組合使用
let enteredDoorCode = true
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
上述代碼中enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword
從左到右開始順序判斷即可轩拨。enteredDoorCode && passedRetinaScan = false
-->enteredDoorCode && passedRetinaScan || hasDoorKey = false
-->enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword = true
- 10.5 .特殊的括號()
為了一個復(fù)雜表達(dá)式更容易讀懂,在合適的地方使用括號可以提高代碼的可讀性院喜。重寫10.4中的代碼亡蓉。
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 輸出 "Welcome!"
以上只是一些簡單的概念說(fan)明(yi),如有錯誤請指正喷舀,謝謝砍濒。Swift 3 學(xué)習(xí) 淋肾,后續(xù)會不斷更新。
如果你覺得我的文章對你有幫助請點喜歡哦爸邢,也可以關(guān)注我樊卓,每周至少一篇技術(shù)更新。
或者關(guān)注 我的專題 每周至少5篇高質(zhì)量文章收錄杠河,多謝支持碌尔。
一起學(xué)習(xí),一起進(jìn)步