iOS開發Swift篇—(四)運算符


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)斷言的使用注意

斷言會導致程序運行的中止,如果不管條件是否成立,都要繼續往下執行代碼,那就不能用斷言

斷言可以保證錯誤在開發過程中會被及時發現,但發布的應用里最好不要使用

如果一個程序用着用着就突然崩潰閃退,會嚴重影響用戶體驗


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM