在设备上,看见数字显示异常,一个很大的数字变成了负数。 第一反应应该是数字溢出,于是去看变量的声明类型,是NSInteger,不是Int。我们都知道NSInteger在32位系统下为int,即存储空间32位(-2147483648 ~ 2147483647),在64位系统下为int64,即存储空间64位(-9223372036854775808 ~ 9223372036854775807)。 既然为64位,肯定没问题啊,数字大到天上去了。
难道是中间有强制类型转换?找了很久,发现没有。 难道是因为oc和swift混编问题,写个demo在模拟器上测试也没问题。 这是为啥?
突然想到,NSInteger在64位系统上为64位,在32位系统上为32位了,等等,32位上为32位 哎,自己傻了,忽略了32位的设备也很多,自己测试的设备就是32位的iPad4,一个老古董设备。哎~~~~。
改正方案: NSInteger换成long long,Swift的换成了Int64.
测试,搞定。