整型
- Int8,UInt8
- Int16,UInt16
- Int32,UInt32
- Int64,UInt64
- Int,Uint
总结:
- Int&UInt字长依赖platform,字长为当前平台本地字长,因此32-bit platform上等同于Int32&UInt32,64-bit platform上等同于Int64&UInt64,具有跨平台和可移植
- Int&UInt不同于其他任何Intx或UIntx类型,即在32-bit platform上,Int与Int32非同一类型,UInt与UInt32非同一类型,在64-bit platform上,Int与Int64非同一类型,UInt与UInt64非同一类型
注:除非特殊情况,整型推荐使用Int(即使只存储非负整数),一致使用Int方便代码互通,避免不必要类型转换
浮点型
- Double:64-bit,精度至少15位小数
- Float:32-bit,精度仅6位小数
注:在两者都满足使用情况下,推荐使用Double
布尔型
- Bool
不支持隐式类型转换
整型,浮点型,布尔型本质都是struct,因此在swift中不支持内置类型隐式类型转换,自然也不支持内置类型运算时的类型提升,这点不同于oc
- 不支持内置类型隐式类型,因此运算符操作数必须符合特定类型要求
- 不支持内置类型类型提升,因此运算符操作数必须保持同一类型
func implicit_convert()
{
var i8: Int8 = 5
var i16: Int16 = 5
var i32: Int32 = 5
var i64: Int64 = 5
var i: Int = 5
var ui: UInt = 5
//i16 = i8
//i = i8
//i = i16
//i = i32
//i = i64
//i = ui;
//ui = i
var f: Float = 5.0
var d: Double = 5.0
//f = d
//d = f
var b: Bool = true
//b = i
//i = b
//b = d
//d = b
}
overflow
如果在编译期确定类型值overflow,编译error,这增强了代码安全性,避免因值overflow引发的逻辑错误
func overflow()
{
//let i8: Int8 = 128
let c1: Int8 = 100
let c2: Int8 = 120
//let sum = c1 + c2
//print("sum = \(c1 + c2)")
}