術語
運算符分為一元励两,二元,三元運算符
- 一元運算符對單一操作對象進行操作(如
-a
)堡称,一元運算符又分前置前置運算符和后置運算符撵彻,前置運算符緊跟操作對象之前(如!b
),后置運算符緊跟操作運算符之后(如c!
) - 二元運算符操作兩個對象(如
2+3
)您单,是中置的斋荞,放在兩個操作對象中間 - 三元運算符,和c語言一樣虐秦,swift只有一種三元運算符平酿,就是三目運算符(
a?b:c
)
受運算符影響的較操作數(shù)凤优,在表達式1+2
中,+
就是運算符蜈彼,1
和2
就是操作數(shù)
賦值運算符
賦值運算符a=b
筑辨,表示用b的值來初始化或者更新a
a=b
不返回任何值
算術運算符
swift中所有的數(shù)值類型都支持來基本的四則算術運算符
- 加法(
+
) - 減法(
-
) - 乘法(
*
) - 除法(
/
)
加法運算符可以拼接字符串
var addStr = "i am" + "Edison"
求余運算符
求余運算符(a%b)是計算 b
的多少倍剛好可以容下a
,返回多出來的那部分(余數(shù))
注意:
求余運算符(%)在其他語言也叫取模運算符柳刮。但是嚴格說來挖垛,我們看該運算符對負數(shù)的操作結果,「求余」比「取谋牛」更合適些
9 % 4 // 等于 1
為了得到a % b
的結果痢毒,%
計算了以下等式,并輸出余數(shù)作為結果:
a = (b × 倍數(shù)) + 余數(shù)
在對負數(shù) b 求余時蚕甥,b 的符號會被忽略哪替。這意味著 a % b
和 a % -b
的結果是相同的
組合賦值運算符
跟c語言一樣,Swift 也提供把其他運算符和賦值運算(=
)組合的組合賦值運算符菇怀,組合加運算(+=
)(-=
) 等等
復合賦值運算沒有返回值凭舶,所以
let b = a+=5
是錯誤的
比較運算符
原標準的c語言中的比較運算符都可以在swift中使用
- 等于
==
- 不等于
!=
- 大于
>
- 小于
<
- 大于等于
>=
- 小于等于
<=
每個比較運算都返回了一個標識表達式是否成立的布爾值
比較運算多用于條件語句,如if
條件
空合運算符
空合運算符(a ?? b
) 將對可選類型a進行空判斷爱沟,如果a
包含一個值就進行解封帅霜,否則就返回一個默認值b
,表達式a
必須是optional類型呼伸,默認值b
的類型必須要對a
儲存值的類型保持一致
空合運算符是對一下代碼的簡短表達方式
a != nil ? a! : b
上述代碼使用了三目運算符身冀。當可選類型a
的值不為空時,進行強制解封(a!
)括享,訪問 a
中的值搂根;反之返回默認值 b
。無疑空合運算符(??
)提供了一種更為優(yōu)雅的方式去封裝條件判斷和解封兩種行為铃辖,顯得簡潔以及更具可讀性
區(qū)間運算符
閉區(qū)間運算符
閉區(qū)間運算符(a...b
) 定義了一個包含 從a
到 b
(包括a
和b
)的所有值的區(qū)間剩愧,a
的值不能超過b
的值,閉區(qū)間運算符在迭代一個區(qū)間的所有值時是非常有用的娇斩,如在 for-in
循環(huán)中:
for index in 1...6 {
print(index)
}
上面的例子中仁卷,index
是一個每次循環(huán)遍歷開始時被自動賦值的常量。這種情況下犬第,index
在使用前不需要聲明五督,只需要將它包含在循環(huán)的聲明中,就可以對其進行隱式聲明瓶殃,而無需使用let
關鍵字聲明。
如果你不需要區(qū)間序列內(nèi)每一項的值副签,你可以使用下劃線(_
)替代變量名來忽略這個值:
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// 輸出 "3 to the power of 10 is 59049"
半開區(qū)間運算符
半開區(qū)間運算符(a..<b
)定義一個從a
到 b
但不包括b
?的區(qū)間
之所以稱為半開區(qū)間遥椿,是因為該區(qū)間包含第一個值而不包括最后的值基矮。
半開區(qū)間的實用性在于當你使用一個從 0 開始的列表(如數(shù)組)時,非常方便地從0數(shù)到列表的長度
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
單側區(qū)間
閉區(qū)間操作符有另一個表達形式冠场,可以表達往一側無限延伸的區(qū)間 —— 例如家浇,一個包含了數(shù)組從索引 2 到結尾的所有值的區(qū)間。在這些情況下碴裙,你可以省略掉區(qū)間操作符一側的值钢悲。這種區(qū)間叫做單側區(qū)間,因為操作符只有一側有值
let names = ["Anna", "Alex", "Brian", "Jack","Fucy","Nacy","Lugy"]
let count = names.count
for j in [...4] {
print(names[j])
}
/*
["Anna", "Alex", "Brian", "Jack", "Fucy"]
*/
let names = ["Anna", "Alex", "Brian", "Jack","Fucy","Nacy","Lugy"]
let count = names.count
for j in [1...] {
print(names[j])
}
/*
["Alex", "Brian", "Jack", "Fucy", "Nacy", "Lugy"]
*/
半開區(qū)間操作符也有單側表示形式
[..<2]
[..<2]
邏輯運算符
- 邏輯非(
!a
) - 邏輯與(
a && b
) - 邏輯或(
a || b
)