swift基础学习篇(二)数据类型
类型 | 类型名 |
---|---|
Int | 整形 |
UInt | 无符号整形 |
Double | 浮点型 |
Float | 浮点型 |
Bool | 布尔类型 |
String | 字符串 |
Array | 数组 |
Dictionary | 子典 |
整数
整数就是没有小数部分的数字(23,-23)。整数可以是有符号(正、负、零)或者无符号(正、零)。
Swift 提供了8,16,32和64位的有符号和无符号整数类型。这些整数类型和 C 语言的命名方式很像,比如8位无符号整数类型是UInt8,32位有符号整数类型是Int32。就像 Swift 的其他类型一样,整数类型采用大写命名法。
整数范围
let minValue = UInt8.min //值是0,所以UInt8的最小值为0
let maxValue = UInt8.max //值是255,所以UInt8的最大值为255
Int
它是由Swift 提供的一个特殊的整数类型,长度与当前平台的原生字长相同:
• 在32位平台上,Int和Int32长度相同。
• 在64位平台上,Int和Int64长度相同。
注:若没有特定的长度要求,用Int足以。这样可以提高代码的一致性和复用性
UInt
Swift 也提供了一个特殊的***无符号***类型UInt,长度与当前平台的原生字长相同:
• 在32位平台上,UInt和UInt32长度相同。
• 在64位平台上,UInt和UInt64长度相同。
注:尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同的无符号整数。除了这种情况,最好使用Int,即使你要存储的值已知是非负的。统一使用Int可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推测,请参考类型安全和类型推测。
浮点数
浮点数是有小数部分的数字,比如3.14159,0.1和-273.15。
浮点类型比整数类型表示的范围更大,可以存储比Int类型更大或者更小的数字。Swift 提供了两种有符号浮点数类型:
• Double表示64位浮点数。当你需要存储很大或者很高精度的浮点数时请使用此类型。(精确度很高,至少有15位数字)
• Float表示32位浮点数。精度要求不高的话可以使用此类型。(至少只有6位数字)
类型安全和类型推测
Swift 是一个类型安全(type safe )的语言。由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。
如果你没有显式指定类型,Swift 会使用类型推测(type inference)来选择合适的类型。有了类型推测,编译器可以在编译代码的时候自动推测出表达式的类型。原理很简单,只要检查你赋的值即可。
例如,
let meaningOfLife = 42 // meaningOfLife 会被推测为 Int 类型
let pi = 3.14159 // pi 会被推测为 Double 类型
let anotherPi = 3 + 0.14159 // anotherPi 会被推测为 Double 类型
注:原始值3没有显式声明类型,而表达式中出现了一个浮点字面量,所以表达式会被推测为Double类型。
数值型字面量
整数字面量可以被写作:
• 一个十进制数,没有前缀
• 一个二进制数,前缀是0b
• 一个八进制数,前缀是0o
• 一个十六进制数,前缀是0x
例:
let decimalInteger = 17
let binaryInteger = 0b10001 // 二进制的17
let octalInteger = 0o21 // 八进制的17
let hexadecimalInteger = 0x11 // 十六进制的17
数值型类型转换
整数转换
在下面的例子中,常量twoThousand是UInt16类型,然而常量one是Uint8类型。它们不能直接相加,因为它们类型不同。所以要调用UInt16(one)来创建一个新的UInt16数字并用one的值来初始化,然后使用这个新数字来计算:
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
整数和浮点数转换
整数和浮点数的转换必须显式指定类型:
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 等于 3.14159,所以被推测为 Double 类型
浮点数到整数的反向转换同样行,整数类型可以用Double或者Float类型来初始化:
let integerPi = Int(pi) // integerPi 等于 3,所以被推测为 Int 类型
当用这种方式来初始化一个新的整数值时,浮点值会被截断。也就是说4.75会变成4,-3.9会变成-3。
注意:结合数字类常量和变量不同于结合数字类字面量。字面量3可以直接和字面量0.14159相加,因为数字字面量本身没有明确的类型。它们的类型只在编译器需要求值的时候被推测。
布尔值
Swift 有一个基本的布尔(Boolean)类型,叫做Bool。布尔值指逻辑上的(logical),因为它们只能是真或者假。Swift 有两个布尔常量,true和false:
let orangesAreOrange = true
let turnipsAreDelicious = false
当你编写条件语句比如if语句的时候,布尔值非常有用:
if turnipsAreDelicious {
println("Mmm, tasty turnips!")
} else {
println("Eww, turnips are horrible.")
}
// 输出 "Eww, turnips are horrible."
如果你在需要使用Bool类型的地方使用了非布尔值,Swift 的类型安全机制会报错。下面的例子会报告一个编译时错误:
let i = 1 if i { // 这个例子不会通过编译,会报错 }
然而,下面的例子是合法的:
let i = 1 if i == 1 { // 这个例子会编译成功 }
i == 1的比较结果是Bool类型,所以第二个例子可以通过类型检查。类似i == 1这样的比较