二 swift學習之基本運算子
————– 借鑑老碼團隊翻譯組-tyrion
1.1術語
運算子有一元、二元和三元運算子。
一元運算子對單一操作物件操作(如-a)。一元運算子分前置運算子和後置運算子,前置運算子需緊排操作物件之前(如!b),後置運算子需緊跟操作物件之後(如i++)。
二元運算子操作兩個操作物件(如2 + 3),是中置的,因為它們出現在兩個操作物件之間。
三元運算子操作三個操作物件,和 c 語言一樣,swift 只有乙個三元運算子,就是三目運算子(a ? b : c)。
受運算子影響的值叫運算元,在表示式1 + 2中,加號+是二元運算子,它的兩個運算元是值1和2。
1.2 賦值運算子
賦值運算(a = b),表示用b的值來初始化或更新a的值:
let b = 10
var a = 5
a = b // a 現在等於 10
如果賦值的右邊是乙個多元組,它的元素可以馬上被分解多個變數或變數:
let (x, y) = (1, 2) // 現在 x 等於 1, y 等於 2
與 c 語言和 objective-c 不同,swift 的賦值操作並不返回任何值。所以以下**是錯誤的:
if x = y
這個特性使得你無法把(==)錯寫成(=)了,由於if x = y是錯誤**,swift 從底層幫你避免了這些**錯誤。
1.3 算數運算子
加法(+) 減法(-) 乘法(*) 除法(/)
1.4 求餘運算子
求餘運算(%)在其他語言也叫取模運算。然而嚴格說來,我們看該運算子對負數的操作結果,」求餘」比」取模」更合適些。
在 swift 中可以表達為:
a % b
9 % 4 // 等於 1
-9 % 4 // 等於-1
9 % -4 // 等於 1
-9 % -4 // 等於-1
餘數的符號取決於a的符號,a若負,餘數就為負數;反之為正
1.5 浮點數求餘計算
不同於 c 語言和 objective-c,swift 中是可以對浮點數進行求餘的。
8 % 2.5 // 等於 0.5
這個例子中,8除於2.5等於3餘0.5,所以結果是乙個double值0.5。
1.6 自增自減運算
++i 先自増再返回
i++ 先返回再自增
例如:
var a = 0
let b = ++a // ++a 相當於 a = a + 1 a 和 b 現在都是 1
let c = a++ // a 現在 2, 但 c 是 a 自增前的值 1
上述例子,let b = ++a先把a加1了再返回a的值。所以a和b都是新值1。
而let c = a++,是先返回了a的值,然後a才加1。所以c得到了a的舊值1,而a加1後變成2。
除非你需要使用i++的特性,不然推薦你使用++i和–i,因為先修改後返回這樣的行為更符合我們的邏輯。
1.7 一元負號運算子和一元正號運算子
數值的正負號可以使用字首-(即一元負號)來切換,中間沒有空格:
let three = 3
let minusthree = -three // minusthree 等於 -3
let plusthree = -minusthree // plusthree 等於 3, 或 「負負3」
一元正號(+)不做任何改變地返回運算元的值。
let minussix = -6
let alsominussix = +minussix // alsominussix 等於 -6
雖然一元+什麼都不會改變,但當你在使用一元負號來表達負數時,你可以使用一元正號來表達正數,如此你的**會具有對稱美。
1.8 復合賦值(compound assignment operators)
如同強大的 c 語言,swift 也提供把其他運算子和賦值運算(=)組合的復合賦值運算子,組合加運算(+=)是其中乙個例子:
var a = 1
a += 2 // a 現在是 3 a += 2是a = a + 2的簡寫
注意:復合賦值運算沒有返回值,let b = a += 2這類**是錯誤。這不同於上面提到的自增和自減運算子。
1.9 比較運算子
所有標準 c 語言中的比較運算都可以在 swift 中使用。
等於(a == b) 1 == 1 // true, 因為 1 等於 1
不等於(a != b) 2 != 1 // true, 因為 2 不等於 1
大於(a > b) 2 > 1 // true, 因為 2 大於 1
小於(a < b) 1 < 2 // true, 因為 1 小於2
大於等於(a >= b) 1 >= 1 // true, 因為 1 大於等於 1
小於等於(a <= b) 2 <= 1 // false, 因為 2 並不小於等於 1
注意: swift 也提供恒等===和不恒等!==這兩個比較符來判斷兩個物件是否引用同乙個物件例項。
比較運算多用於條件語句,如if條件:
let name = 「world」
if name == 「world」 else
// 輸出 「hello, world」, 因為name
就是等於 「world」
1.10 三目運算子(ternary conditional operator)
三目運算子的特殊在於它是有三個運算元的運算子,縮寫形式: 條件 ? 成立 : 不成立。它簡潔地表達根據問題成立與否作出二選一的操作。如果條件成立,返回成立; 如果不成立,返回不成立。
1.11 空合運算子(nil coalescing operator)
空合運算子(a ?? b)將對可選型別a進行空判斷,如果a包含乙個值就進行解封,否則就返回乙個預設值b.這個運算子有兩個條件:
1)表示式a必須是optional型別
2)預設值b的型別必須要和a儲存值的型別保持一致
空合併運算子是對以下**的簡短表達方法
a != nil ? a! : b
上述**使用了三目運算子。當可選型別a的值不為空時,進行強制解封(a!)訪問a中值,反之當a中值為空時,返回預設值b。無疑空合運算子(??)提供了一種更為優雅的方式去封裝條件判斷和解封兩種行為,顯得簡潔以及更具可讀性。
注意: 如果a為非空值(non-nil),那麼值b將不會被估值。這也就是所謂的短路求值。
下文例子採用空合併運算子,實現了在預設顏色名和可選自定義顏色名之間抉擇:
let defaultcolorname = 「red」
var userdefinedcolorname:string? //預設值為nil
var colornametouse = userdefinedcolorname ?? defaultcolorname
//userdefinedcolorname的值為空 ,所以colornametouse的值為red
userdefinedcolorname變數被定義為乙個可選字串型別,預設值為nil。由於userdefinedcolorname是乙個可選型別,我們可以使用空合運算子去判斷其值。在上乙個例子中,通過空合運算子為乙個名為colornametouse的變數賦予乙個字串型別初始值。 由於userdefinedcolorname值為空,因此表示式userdefinedcolorname ?? defaultcolorname返回預設值,即red。
另一種情況,分配乙個非空值(non-nil)給 userdefinedcolorname,再次執行空合運算,運算結果為封包在userdefaultcolorname中的值,而非預設值。
userdefinedcolorname = 「green」
colornametouse = userdefinedcolorname ?? defaultcolorname
//userdefinedcolorname非空,因此colornametousede的值為綠色
1.12 區間運算子
swift 提供了兩個方便表達乙個區間的值的運算子。
1)閉區間運算子(a…b)定義乙個包含從a到b(包括a和b)的所有值的區間,b必須大於a。 閉區間運算子在迭代乙個區間的所有值時是非常有用的,如在for-in迴圈中:
for index in 1…5
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25
2)半開區間運算子
半開區間(a..
Swift 基本運算子之數值運算
運算子是檢查,改變,合併值的特殊符號或短語.例如,加號 把計算兩個數的和 如 let i 1 2 複雜些的執行算包括邏輯與 如 if entereddoorcode passedretinascan 還有自增運算子 i 這樣讓自身加一的便捷運算。下面介紹基礎運算子中的數值運算。swift 讓所有數值...
Swift 教程(二) 基本運算子
swift 支援 c 中的大多數標準運算子,有過 c 語言基礎或者其他語言基礎的都不陌生,在這就不做過多的闡述了。現在說點不一樣的東西,swift 提供了兩張 c 中沒有的區間運算子 a 區間運算子 swift 包含了兩個區間運算子,他們是表示乙個範圍的值的便捷方式。閉區間運算子 a b 定義了從 ...
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 不能被比較,也意味著...