Swift的基本運算子,Swift運算子
今天學習了Swift語言的最基本的知識,以下是本人的一些認識與小結,希望能協助更多人的區理解,如有不妥的地方望大家指出,以便及時更正。
基本運算子
運算子是一種特殊的符號或短語,你可以用它來檢查,改變,或組合值。
運算子都是一元,二元或者三元:
- 一元運算子操作單個對象主要有:首碼操作符 (如 -a,!a)和尾碼操作符在對象後出現 (如 i++,i--)。
- 二元運算子操作兩個對象且在兩對象之間,主要有:-,+,*,/,%,<,>,=。(如 a-b, a+b, a*b, a/b, a%b, a<b, a>b, a=b)
- 三元運算子對兩個對象進行操作,與C語言一樣,Swift也只支援一個三元運算子:三元條件操作符 (a ? b : c).
賦值運算子
賦值運算子 (a=b) 用 b 的值去初始化或更新a的值
let b =2 var a = 3 a= b //此時a的值等於b的值都是2
假如右邊賦值的資料為多個資料的元組,它的元素可以是一次性賦給的多個常量或變數
let (a, b) = (1, 2)// a等於1, b等於2
與C及Objective-C不同,Swift中賦值運算子並不將自身作為一個值進行返回。所以以下的代碼是不合法的:
if x = y {// 錯誤, 因為x = y並不會返回一個值}
數學運算子
Swift支援所有數字類型的四個標註運算子:
例如:
1 + 2 // equals 35 - 3 // equals 22 * 3 // equals 610.0 / 2.5 // equals 4.0
不同於C和Objective-C,預設情況下Swift的算術運算子不允許值溢出。加法運算子對字串串連也一樣適用,例如:
"hello, " + "world" // equals "hello, world"
兩個字元,或者一個字元一個字串,能組合成一個新的字串:
let dog: Character = "dog"let cow: Character = "cow"let dogCow = dog + cow// dogCow is equal to "dogcow"
取餘運算子
取餘運算子%是指在除數除以被除數時餘下的數,如(3%2的餘數就是1)
let a = 5let b = 3let c = a%b//這時c的值是2
同一個方法中如果a的值是-5那麼取餘運算後c的值就是-2,如果b的值是-3則c的值會是2,也就是說取餘運算的符號不受被除數b的影響,只受除數a的影響
浮點餘數計算
不同於C與OC的是Swift的取餘運算同樣可以運用於浮點數:
let a = 8let b = 2.5let c = a%b//那麼現在的c的值是0.5
自增自減運算子
和C一樣Swift提供了自增(++),自減(--)兩個運算子,其增減量為1,可以對任何的整點或浮點類型的變數使用。如
var a = 0++a //這時a的值是1--a //這時a的值是0
這裡需要注意的是當運算需要傳回值的時候,自增自減運算子所放的位置的不同對運算的結果也是不一樣的:
var a = 0let b = ++a //a和b的值都為1let c = a++ //這時a的值是2 c的值是1let d = --a //這時d的值是1 a的值也是1let e = a-- //這時e的值是1 a的值是0
複合賦值操作符
Swift提供了和C語言一樣的複合複製操作符,就是說把賦值和另外一種運算子結合起來。如(+=),(-=):
var a = 1a += 2 //這時a的值為3 a -= 3 //這時a的值為0
加法賦值操作符的原型是 a = a + 2,之所以寫成(+=)是因為這樣寫能夠有效地把加法和賦值組合到一個運算,同時執行這兩個任務。
需要注意的是:複合複製操作符不傳回值。例如這樣寫就是不對的 let a = +=1。
比較子
Swift支援所有C的比較子。
- 大於(a>b)
- 小於 (a<b)
- 大於等於 (a >= b)
- 小於等於 (a <= b)
- 等於 (a = b)
- 不等於 (a != b)
let a = 5let b = 6let c = 5a>b //返回false c<b //返回truea>=c //返回true a<=c //返回truea == c //返回truea != b //返回true
這種比較子通常都用在條件陳述式中,比如if語句
let a = "chk"if a == "chk"{ println("hello, chk") } else{ println("not chk") }//輸出的結果是 hello, chk
關於if語句我們以後再詳細研究
範圍運算子
Swift提供了兩種形式的範圍運算子
1、封閉範圍運算子
封閉範圍運算子(a...b)定義了一個範圍,從a到b,並包括了a和b的值。一般用於for -in 迴圈語句中
for i in 0...5{ println("第 \(i) 次")}//第 0 次//第 1 次//第 2 次//第 3 次//第 4 次
關於for -in語句我們以後再深入研究。
2、半封閉的地區運算子
半封閉的地區運算子(a..b)定義了從a到b的範圍,但不包括b。它被認為是半封閉的,因為它包含第一個值,而不包含最終值。
半封閉的範圍使用明確,當你使用從零開始的列表,如數組,它是有用的數到(但不包括)列表的長度:
let names = ["Anna", "Alex", "Brian", "Jack"]let count = names.countfor i in 0..count {println("Person \(i + 1) is called \(names[i])")}// Person 1 is called Anna// Person 2 is called Alex// Person 3 is called Brian// Person 4 is called Jack
請注意,該數組包含四個項目,但0 . .數只數到3(數組中的最後一個項目的索引),因為它是一個半封閉的範圍。有關數組的資訊,我們以後深入研究。
三元運算子
Swift跟C語言一樣也支援三元運算,三元運算也屬於條運算,主要形式是 a?b:c 其表達的意思是判斷a的值,若a的值返回true則運算式返回b的值,若a的值返回false則返回c的值。下面我們用代碼比較下三元運算子的優勢:
let a = truelet b = a?2:3//這時b的值是2
上邊的運算式也可以這樣寫
let a = trueif a { reture 2}else{ reture 3}//結果是2
很明顯使用三元運算子更簡潔,更方便。不過需要注意的是為了保證代碼的可讀性,最好不要使用多個執行個體的三元條件運算子組合成一個複合陳述式。
邏輯與運算子
Swift支援這三個標準邏輯運算子基於C語言,通常用在條件陳述式中:
- not (!a)
- and (a&&b)
- or (a || b)
邏輯非運算子(!a)表達的意思為不是什麼成立則返回true,不成立則返回false
let a = trueif !a { println("條件成立")}else{ println("條件不成立")}//輸出結果是 條件不成立//因為a本身是正確地,而邏輯非運算子說a不是正確地,所以不成立返回false
邏輯與運算子(A&&B)表達的意思為A,B兩個值都必須是true才返回true,否則A,B中有一個是false就返回false
let A = truelet B = falseif A && B { println("條件成立返回true")}else{ println("條件不成立返回false")}//輸出結果是 條件不成立返回false
邏輯或運算子(A || B)表示A和B其中有一個是true則返回true,如果A,B都是false則結果返回false
let A = truelet B = falseif A || B { println("條件成立返回true")}else{ println("條件不成立返回false")}//列印結果是 條件成立返回true
在這裡值得一提的是不管是邏輯與運算子還是邏輯或運算子都用到了短路條件判斷法,比如說邏輯與運算子(&&)必需是兩個值都為true時才成立,那麼當左邊的值是false的時候,條件不成立,就不需要再判斷運算子右邊的值了。邏輯或運算子(||)也是同樣的道理,邏輯或運算子(||)是只要有一個值是true就成立,那麼當判斷左邊的值是true時,則條件是成立的,就不用再判斷運算子右邊的值了。
複合邏輯運算式
符合邏輯運算式是將多個邏輯運算子複合後建立更長的複合運算式:
let a = truelet b = falselet c = trueif !a || c && b { println("條件成立")}else { println("條件不成立")}//輸出結果是條件不成立
像這種複合邏輯運算式的判讀一般都是從左至右根據邏輯運算子的優先順序依次進行判斷,(!,&&,||)這三個運算子的優先順序是一樣的,只需要牢記邏輯與運算子(&&)兩者都必須是true才成立,邏輯或運算子(||)兩者有一個是true則成立,如此即可正確解析整個複合運算式,一定要透過現象看本質。
明確地括弧
這個就比較好理解了,在複合邏輯運算式中我們可以添加()使邏輯意圖更加明確,比如在上段代碼中我們加入()
let a = truelet b = falselet c = trueif !a || ( c && b ) { println("條件成立")}else { println("條件不成立")}//輸出結果是條件不成立
在符合邏輯運算式中我們可以把幾個值放在一個單獨的邏輯運算中去判斷出結果,然後根據()內判斷的結果再與前面或後面的值進行判斷,最後得出最終結果