今天學習了Swift語言的最基本的知識,以下是本人的一些認識與小結,希望能幫助更多人的區理解,如有不妥的地方望大家指出,以便及時更正。
基本運算符
運算符是一種特殊的符號或短語,你可以用它來檢查,改變,或組合值。
運算符都是一元,二元或者三元:
賦值運算符
賦值運算符 (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的比較運算符。
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語句我們以后再深入研究?! ?/span>
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語言,通常用在條件語句中:
邏輯非運算符(!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("條件不成立")}//輸出結果是條件不成立
在符合邏輯表達式中我們可以把幾個值放在一個單獨的邏輯運算中去判斷出結果,然后根據()內判斷的結果再與前面或后面的值進行判斷,最后得出最終結果
新聞熱點
疑難解答