Swift 是一种类型安全(type safe )的语言。
类型安全的语言会让你更清楚代码中可以使用的值的类型。
如果你的代码预期一个String,你绝不能误入一个Int。
因为 Swift是类型安全的,编译器编译你的代码时会执行类型检查(type checks),
并标记出任何不匹配的类型错误。这使你在开发过程中能够尽早捕获并修复错误。
当你使用不同类型的值时,类型安全检查可以帮助你避免错误。
当然,这并不意味着你必须为每一个常量和变量显示地指定类型。
如果你没有显示地指定类型,Swift会进行类型推测(type inference),选择出适当的类型。
类型推测就是编译器在编译代码时能够推断出特定的表达式的类型,主要是根据所提供的值进行推测。
因为类型推测,所以 Swift比 C 或 Objective - C 需要更少的类型声明。
虽然常量和变量需要明确类型,但大部分的工作不需要你来做。
类型推测是特别有用的,当你声明一个常量或变量并初始值的时候,即触发类型推测。
例如,你给一个常量赋值42,但没有标明类型,
Swift 可以推测出常量类型是Int,因为你给它赋的值看起来像一个整数:
var myAppleCount = 42
myAppleCount++
同样的,如果你不指定一个常量为浮点类型,Swift 推断出你想要的是Double类型
var pi = 3.1415926
pi = pi * 1
如果你把整数和浮点数同时用在表达式中,Swift 会推测为Double 类型:
数字 3 没有显式的类型,而表达式中出现了一个浮点数,因此,表达式被推测为 Double类型
let another = 3 + 0.00222
pi = another
数字类型字面值
整数字面值可以写为:
一个十进制数,没有前缀
一个二进制数,前缀是 0b
一个八进制数,前缀是 0o
一个十六进制数,前缀是 0x
下面的所有整数面值的十进制值都是17:
var decimalInteger = 17
var binaryInteger = 0b10001
var octalInteger = 0o21
var hexadecimalInteger = 0x11
print(decimalInteger)
print(binaryInteger)
print(octalInteger)
print(hexadecimalInteger)
浮点数面值可以是十进制(没有前缀),或者是十六进制(0x前缀)。
但必须有至少一个十进制数字(或十六进制数)在小数点两侧。
浮点数面值还有一个可选的指数(exponent),在十进制浮点数中通过大写或者小写的e来表示,
在十六进制浮点数中通过大写或者小写的p来表示。
如果一个十进制数的指数为exp,那这个数相当于基数和10^exp(10的exp次方)的乘积:
1.25e2 表示 1.25×10^2,等于 125.0
1.25e-2 表示 1.25×10^-2,等于 0.0125。
如果一个十六进制数的指数为exp,那这个数相当于基数和2^exp(2的exp次方)的乘积:
0xFp2 表示 15×2^2,等于 60.0。
0xFp-2 表示 15×2^-2,等于 3.75。
下面的这些浮点字面量都等于十进制的12.1875
var decimalDouble = 12.1875
var exponentDouble = 1.21875e1
var hexadecimalDouble = 0xC.3p0
print(decimalDouble)
print(exponentDouble)
print(hexadecimalDouble)
数值类面值可以包括额外的格式来增强可读性。整数和浮点数都可以添加额外的零并且包含下划线,这不会影响字面量
let paddedDouble = 000123.456
let oneMillion :Double =1_000_000
let justOverOneMillion = 1_000_000.000_000_1
print(paddedDouble)
print(oneMillion)
print(justOverOneMillion)