iOS開發Swift篇—(四)運算符
一、運算符
1.Swift所支持的部分運算符有以下一些
賦值運算符:=
復合賦值運算符:+=、-=
算術運算符:+、-、*、/
求余運算符:%
自增、自減運算符:++、--
比較運算符:==、!=、>、<、>=、<=
邏輯運算符:&&、||、!
三目運算符:? :
范圍運算符:..< 、...
溢出運算符:&+、&-、&*、&/、&%
2.賦值運算符
(1)1對1賦值
var a = 5
let b = 20
(2)N對N賦值(元組)
let (x, y) = (1, 2) // x的值是1,y的值是2,並且都是常量
注意:跟C\OC不一樣的是:Swift的賦值運算符沒有返回值
if (x = y) { }
// 上面的代碼是錯誤的,因為x = y並沒有返回具體的值
說明:這樣的好處是防止誤用 = 和 ==
3.算術運算符
簡單使用
1 + 2 // 3
5 - 3 // 2
2 * 3 // 6
10.0 / 2.5 // 4.0
"http://" + "www.wendingding.cn" // "http://www.wendingding.cn"
4.求余運算符
%在Swift中叫“求余運算符”,也有語言叫做“模運算符”
9 % 4 // 1
-9 % 4 // -1
9 % -4 // 1
-9 % -4 // -1
提示:求余結果的正負跟%左邊數值的正負一樣
注意:跟C語言不一樣的是,Swift的%支持浮點數的計算
8 % 2.5 // 0.5
5.Bool類型
Bool類型,也被稱為邏輯類型(Logical),就2種取值
true:真
false:假
注意:在C語言中:0是假,非0就是真;而在Swift中沒有這種概念
if語句的條件必須是Bool類型的值
(1)錯誤寫法
if (10) {
println("條件成立")
}
(2)正確寫法
if (true) {
println("條件成立")
}
6.三目運算符
比較運算符\邏輯運算符會返回Bool類型的值,取值有2種可能
true:真,6 > 5,(7 > 6) && (9 != 7)
false:假,6 < 5,(7 >= 6) && (9 == 7)
三目運算符的條件必須是Bool類型的值
(1)錯誤寫法
let a = 10
let c = a ? 100 : 200
(2)正確寫法
let c = a != 0 ? 100 : 200
let c = false ? 100 : 200
7.范圍運算符
范圍運算符用來表示一個范圍,有2種類型的范圍運算符
閉合范圍運算符:a...b,表示[a, b],包含a和b
半閉合范圍運算符:a..<b,表示[a, b),包含a,不包含b
舉例:
// index的值從1~5
// index的值從1~4
8.溢出運算符
(1)簡單說明
每種數據類型都有自己的取值范圍,默認情況下,一旦賦了一個超出取值范圍的數值,會產生編譯或者運行時錯誤
注意:下面的寫法是錯誤的
let x = UInt8.max
let y = x + 1
第2行代碼會在運行時報錯(運行時錯誤)
提示:上面是運行時錯誤,下面的錯誤提示是編譯時錯誤。
Swfit為整型計算提供了5個&開頭的溢出運算符,能對超出取值范圍的數值進行靈活處理
溢出加法 &+
溢出減法 &-
溢出乘法 &*
溢出除法 &/
溢出求余 &%
(2)值的上溢
let x = UInt8.max
let y = x &+ 1
第1行代碼過后:x的值是 255(最大值)
第2行代碼過后:y的值是 0(最小值)
(3)值的下溢
let x = UInt8.min
let y = x &- 1
第1行代碼過后:x的值是 0(最小值)
第2行代碼過后:y的值是 255(最大值)
有符號整數也有類似的溢出現象
let x = Int8.min
let y = x &- 1
第1行代碼過后:x的值是 -128(最小值)
第2行代碼過后:y的值是 127(最大值)
(4)除零溢出
默認情況下,一個數除於0,或者對0求余數,編譯器會直接報錯
let x = 10
let y = x / 0
let z = x % 0
第2、3行代碼:編譯器都會報錯
如果使用溢出運算符,就不會報錯
let x = 10
let y = x &/ 0
let z = x &% 0
y和z的值最終都是0
二、斷言
1.簡單說明
斷言是一種實時檢測條件是否為true的方法
如果條件為true,那么代碼繼續執行
如果條件為false,就拋出錯誤信息,直接終止程序的運行
2.斷言的用法
使用全局的assert函數
assert函數接收一個Bool表達式和一個斷言失敗時顯示的消息
assert(index >= 0, "index必須大於0")
如果index大於等於0,就繼續執行后面的代碼
如果index小於0,就拋出錯誤信息(下面的黑色字),直接終止程序的運行
assertion failed: index必須大於0
assert(index >= 0)
可以省略錯誤信息,但不推薦,這樣不利於調試
3.使用場景和注意
(1)下面的場景,可能用到斷言
檢測數組的索引:不能太小或者太大,否則造成數組越界
檢測傳遞給函數的參數:如果是無效參數,將不能在該函數中使用
(2)斷言的使用注意
斷言會導致程序運行的中止,如果不管條件是否成立,都要繼續往下執行代碼,那就不能用斷言
斷言可以保證錯誤在開發過程中會被及時發現,但發布的應用里最好不要使用
如果一個程序用着用着就突然崩潰閃退,會嚴重影響用戶體驗