Swift基礎學習(二)數據類型
在編程語言中,不同的數據信息需要不同的數據類型來存儲,計算機內存中針對不同的數據類型它們所分配的內存大小是不同的,特定的值需要特定的類型來聲明。
Swift 數據類型
內置數據類型
整數 - Int & UInt
根據一個整數變量占據的內存空間(8/16/32/64-bit,現在 iOS 開發基本全部是 64 位)以及整數是否帶有符號(Unsinged),Swift 一共定義了 8 種不同的整數類型:
Int8/Int16/Int32/Int64
UInt8/UInt16/UInt32/UInt64
第一行表示有符號整數,第二行表示無符號整數。
一般不會在代碼中直接使用這些具體的整數類型,只使用 Int 來定義有符號整數,使用 UInt 來定義無符號整數。Swift 編譯器會根據當前的目標編譯平臺,把 Int 或者 UInt 轉換成相應的整數類型。
例如在 32 位平臺上,Int 和 Int32 表示的整數長度相等。
在 64 位平臺上,分別使用 mix 和 max 方法,看看 Int 和 Int64 所表達的值分別是多:
1 print("Int.min = \(Int.min)") 2 print("Int.max = \(Int.max)") 3 print("Int64.min = \(Int64.min)") 4 print("Int64.max = \(Int64.max)") 5 6 打印結果: 7 Int.min = -9223372036854775808 8 Int.max = 92233720368547758079 Int64.min = -9223372036854775808 10 Int64.max = 9223372036854775807
Int 和 Int64 表達的範圍是一樣的。
同時在 Swift 裏面,可以用不同的進制來表達一個整數:
1 let fifteenInDecimal = 15 // 10 進制 2 let fifteenInHex = 0xF // 16 進制 3 let fifteenInOctal = 0o17 // 8 進制 4 let fifteenInBinary = 0b1111 // 2 進制
以及在數字中使用下劃線:
1 let million = 1_000_000
提示: 除非所在的硬件平臺有特別明確的要求要使用 UInt 來定義無符號整數,那麽應該盡可能的使用 Int 來表達所有的整數類型,哪怕可以確定一個整數一定是非負數,這會減少很多不必要的類型轉換的麻煩。
浮點數 - Float & Double
在 Swift 裏面,根據表達的精度不同,有兩種不同的浮點數類型:
Float: 最多表達 6 位精度的浮點數。
Double: 至少可以表達 15 位精度的浮點數。
1 var oneThirdInFloat: Float = 1/3 2 var oneThirdInDouble: Double = 1/3 3 4 print("\(oneThirdInFloat)") 5 print("\(oneThirdInDouble)") 6 7 打印: 8 0.333333 9 0.333333333333333
還可以使用科學計數法表示浮點數:
1 var PI = 0.314e1 2 PI = 314e-2
提示: 如果沒有明確的需求,應該統一使用 Double 來定義浮點數。
和數字有關的 Type Inference
在 Swift 裏,當給變量不指定類型的時候,編譯器會把整數的類型推倒為 Int,會把浮點數的類型推倒為 Double:
1 var three = 3 2 print(" 3 的類型是: \(type(of: three))") 3 4 var zeroPointForteen = 0.4 5 print(" 0.4 的類型是: \(type(of: zeroPointForteen))") 6 7 打印: 8 3 的類型是: Int 9 0.4 的類型是: Double
在 Swift 裏面可以把不同類型的數字的字面值直接進行運算:
1 var PI = 3 + 0.14 2 print(" PI 的值: \(PI), PI 的類型是:\(type(of: PI))") 3 4 打印: 5 PI 的值: 3.14, PI 的類型是:Double
但是不能把不同數字類型的變量直接進行算數運算,當對變量進行算數運算的時候,所有變量的類型必須是相同的,如果變量類型不同,必須明確將其中一些變量進行類型轉換:
1 var sum = Double(three) + zeroPointForteen
從上面可以看出,使用 Double(three) 把一個 Int 類型的 three "轉換"成了浮點數,在這裏,之所以對轉換加引號,是因為並沒有真的把 three 類型從 Int 轉換成 Double,而是用 three 的值,初始化了一個新的值為 3 的 Double,並用這個新的 Double 和 zeroPointForteen 相加而已。
參考鏈接:https://www.boxueio.com/series/swift-up-and-running/ebook/2
Swift基礎學習(二)數據類型