在Swift中我们一般简单的使用Int来表示整数,在iPhone 5和以下的设备中,这个类型其实等同于Int32,而在64位设备中表示的是Int64(这点和Objective-C中的NSIntereger表现是完全一样的,事实上,在Swift中NSInteger只是一个Int的typealias)。这就意味着,我们在开发的时候必须考虑同样的代码在不同平台上的表现差异,比如下面的这段代码计算在32位设备上和64位设备上的表现就完全不同:
class MyClass {
var a:Int = 1
func method() {
a= a*100000
a= a*100000
a= a*100000
printle(a)
}
}
MyClass().method()
//64位环境
//1,000,000,000,000,000
//32位环境
//崩溃
Swift在溢出的时候选择让程序直接崩溃而不是截掉超出的部分,这也是一种安全性的表现。
编译器可以帮助我们在编译的时候就发现某些必然的错误,比如:
func method() {
var max = Int.max
max = max + 1
}
在Swift中,我们可以使用以下这五个带有&的操作符,这样的Swift就会忽略掉溢出的错误:
溢出加法 &+
溢出减法 &-
溢出乘法 &*
溢出除法 &/
溢出求模 &%
var max = Int.max
max = max &+ 1
//64位系统下
//max = -9,223,372,036,854,775,808