數值類型
整數
Swift 的 Int 在沒有指定容量的的情況下, 會依據作業系統決定為 32bit 的 Int32 或 64bit 的Int64, Swift 也支援 8/16 bit 的 Int8/16 與不帶負數的 UInt, 所以保留字一共有
- Int
- Int8
- Int16
- Int32
- Int64
- UInt
- UInt8
- UInt16
- UInt32
- UInt64
雖然實作上不常用到,但Swift 的整數類別真的有這麼多。Swift並沒有 Long 的整數類型, 但其實與 Int64是相同的。
雖然 Int 在 64 位元的系統下,長度為64bit, 但 Int 與 Int64 仍視為不同的類型,所以必要時,仍需要做型別轉換。比如說,你寫了一個函數參數指定 Int64 的參數,你就不可以使用 Int 類型做為參數,要轉型為 Int64 才行。
Value Type 與 Reference Type
很有趣的一件事,整數(與後面幾個資料型別)在 Swift中,是一個 Value Type,而不是 Objective-C/C 的 int 單純的資料型別,它是大寫的 Int,不是小寫的 int。
Swift 的 Value Type 是一種介於 Objective-C 的 基本資料類型(指 int, long, float 等型別) 與類別 (Class) 之間的東西,而不是大多數語言中,單純指資料而言。
Value Type不同於 Class, 他不支援繼承,所以也沒有像是父類別的東西,但某些方面如同 Class 一樣有一些其他我們以前在學物件導向時所學的一些類別的功能,包括方法、屬性等特性,也支援類似 Objective-C 中的 Category 以及 Protocol 等特性,也就是說,在 Objective-C 中的 int (就是 C 的 int) 就是資料型,無法擴充,但在 Swift 中 Value Type會產生一個實體,可以使用類似 Objective-C 的 Category 之類的方法,擴充,不過我們先了解這是,在 Swift 下,所有的資料【全部】都可視為 Instance,沒有類似 C的資料類型。
而與 Objective-C 相同的 Class 類別,在 Swift 中叫 ReferenceType,它就有與 Objective-C class幾乎相同的特性。
浮點數
Swift 可以使用 Float 與 Double 兩種精準度的浮點數, 但若沒有指定, Swift 會認為所有的浮點數為 Double
布林值
Swift 的布林值是叫 Bool
要特別注意的是,其值只能用 true 或 false 表示, 不可使用 YES,NO,0,非0 等我們在 Objectvie-C 用的其他方式。
數學運算子
Swift 的運算子, 包括基本的數學四則運算子, 包括 【+】【-】【*】【/】與餘數運算子【%】, 並且符合一般括弧優先, 先乘除後加減, 由左至右等原則。
這部分本身很容易了解, 唯一要注意的是資料類型的問題。
四則運算時,通常整數運算出來的結果就是整數,但運算子元中有一個為浮點數是, 所有運算就會自動轉成浮點數運算, 會影響輸出結果
餘數運算子,如 100 % 30 結果為 10,Swift 3 開始,餘數只支援整數的運算,不支援浮點數的餘數運算,要用函數來取得。
以下是一些計算的案例
print(3/2) //輸出為 1(整數)
print(3/2.0) //輸出為 1.5(轉為浮點數)
print(2+3*3) //輸出為 11(先 3*3)
print((2+3)*3) //輸出為 15(先 2+3)
print(3/2.0*3) //輸出為 4.5(3/2.0 轉為浮點數再乘3)
print(3/2*3) //輸出為 3(3/2 為整數乘3)
print(30 % 13) //輸出為 5
指定運算子
主要的運括子為 【=】,其他括括運算後指定的【+=】【-=】【/=】【*=】【%=】
var a = 1
a += 1
print(a) // 輸出 2
要注意的是, Swift 的指定運算子是沒有回傳值的, 不同是 Obj-C 一樣會回傳結果, 所以不能把指定運算的成功與否當成數字來使用。例在Objective-C中,如果這樣:、
int i =100;
NSLog( @"%i", i += 50 );
會輸出 150,但若在 Swift中,執行以下的程式
var a = 100
print( a += 50 ) //輸出 ()
輸出的會是一對括弧, 表示沒有回傳,由於沒有回傳值,所以我們就不能連續指定,如 【 a = b = 3 】或者加總比較條如【 a == ( b += 3 )】之類的條件式,在Swift 都是不被准許的語法。
另外 Swift 3 之後, 沒有 C/Obj-C 的遞增/遞減運算子【++】【--】所以像是 a++ 之類的寫法, 必需要改寫為 a += 1
比較運算子
所有標準 C 語言中的比較運算都可以在 Swift 中使用。
- 等於(a == b)
- 不等於(a != b)
- 大於(a > b)
- 小於(a < b)
- 大於等於(a >= b)
- 小於等於(a <= b)
邏輯運算子
邏輯運算的操作物件是邏輯布林值。Swift 支援基於 C 語言的三個標準邏輯運算。
- 邏輯非(!a)
- 邏輯且(a && b)
- 邏輯或(a || b)
留言列表