注释
- 单行注释(//)
- 多行注释,/**/
- 多行注释可以嵌套
/* 这是第一个多行注释的开头
/* 这是第二个被嵌套的多行注释 */
这是第一个多行注释的结尾 */
分号
- 可用,也可不用
- 一种情况下必须要用分号,即你打算在同一行内写多条独立的语句
let cat = "🐱"; print(cat)
整数
- Swift 提供了8、16、32和64位的有符号(正、负、零)和无符号整数类型(正、零)
- 像 Swift 的其他类型一样,整数类型采用大写命名法(capitalized names)。
整数范围
- min 和 max 属性来获取对应类型的最小值和最大值
let minValue = UInt8.min // minValue 为 0,是 UInt8 类型
let maxValue = UInt8.max // maxValue 为 255,是 UInt8 类型
Int
- Int,长度与当前平台的原生字长相同:
- 在32位平台上,Int 和 Int32 长度相同。
- 在64位平台上,Int 和 Int64 长度相同。
这可以提高代码一致性和可复用性
UInt
- 在32位平台上,UInt 和 UInt32 长度相同。
- 在64位平台上,UInt 和 UInt64 长度相同。
尽量不要使用 UInt, 最好使用 Int, 避免不同类型数字之间的转换
浮点数
Double
表示64位浮点数,精度至少15位数字。-
Float
表示32位浮点数,精度只有6位数字。优先选择
Double
。
类型安全和类型推断
-
没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型
let meaningOfLife = 42 // meaningOfLife 会被推测为 Int 类型
let pi = 3.14159 // pi 会被推测为 Double 类型
let anotherPi = 3 + 0.14159 // anotherPi 会被推测为 Double 类型
数值型字面量
一个十进制数,没有前缀
一个二进制数,前缀是
0b
一个八进制数,前缀是
0o
-
一个十六进制数,前缀是
0x
let decimalInteger = 17 let binaryInteger = 0b10001 // 二进制的17 let octalInteger = 0o21 // 八进制的17 let hexadecimalInteger = 0x11 // 十六进制的17
十进制数的指数为 exp
,那这个数相当于基数和10^exp 的乘积:
1.25e2
表示 1.25 × 10^2,等于125.0
。1.25e-2
表示 1.25 × 10^-2,等于0.0125
。
十六进制数的指数为 exp
,那这个数相当于基数和2^exp 的乘积
-
0xFp2
表示 15 × 2^2,等于60.0
。 -
0xFp-2
表示 15 × 2^-2,等于3.75
。
-
整数和浮点数, 都可添加额外的零、下划线
let paddedDouble = 000123.456 let oneMillion = 1_000_000 let justOverOneMillion = 1_000_000.000_000_1
数值型类型转换
整数转换
Int8
存储数字范围-128~
127-
UInt8
存储数字范围0~
255let cannotBeNegative: UInt8 = -1 // UInt8 类型不能存储负数,所以会报错 let tooBig: Int8 = Int8.max + 1 // Int8 类型不能存储超过最大值的数,所以会报错
let twoThousand: UInt16 = 2_000 let one: UInt8 = 1 let twoThousandAndOne = twoThousand + UInt16(one)
SomeType(ofInitialValue)
是调用 Swift 构造器并传入一个初始值的默认方法。不能传入任意类型的值,只能传入
UInt16
内部有对应构造器的值。可以扩展现有的类型, 让它可以接收其他类型的值(包括自定义类型)。请参考 扩展。
整数和浮点数转换
let integerPi = Int(pi)
// integerPi 等于 3,所以被推测为 Int 类型
-
浮点值会被截断。也就是说
4.75
会变成4
,-3.9
会变成-3
。结合数字类常量和变量不同于结合数字类字面量, 字面量
3
可以直接和字面量0.14159
相加,因为数字字面量本身没有明确的类型。它们的类型只在编译器需要求值的时候被推测。
类型别名
-
使用
typealias
关键字来定义类型别名。typealias AudioSample = UInt16
布尔值
区别于C和OC,Swift的布尔类型为一种单独类型,更加安全和更高的可读性
Swift 有一个基本的布尔(Boolean)类型,叫做
Bool
-
Swift 有两个布尔常量,
true
和false
let orangesAreOrange = true let turnipsAreDelicious = false
使用非布尔值,Swift 的类型安全机制会报错
let i = 1
if i {
// 这个例子不会通过编译,会报错
}
-
合法的:
let i = 1 if i == 1 { // 这个例子会编译成功 }