Sim*_*eer 1 crash ios exc-bad-instruction swift
我是Swift和iOS开发的新手,但我遇到了一个错误,导致我的应用程序在以下设备上运行时崩溃:
iPhone 4S iPhone 5 iPad 2 iPad Retina
这是被标记的代码:
// bin2dec - converts binary string into decimal string
func bin2dec(input: String) -> String {
var counter = countElements(input)
var digit: Character
var power = 1
var result = 0
while counter > 0 {
digit = input[advance(input.startIndex, counter-1)]
switch digit {
case "0":
result += 0
case "1":
result += 1 * power
default:
power = power / 2
break
}
counter--
power *= 2
}
return "\(result)"
}
Run Code Online (Sandbox Code Playgroud)
而错误是:
Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激,谢谢!
iPhone 4S,iPhone 5,iPad 2,iPad Retina是32位设备,其中Int
是32位整数.因此从一开始
var power = 1
Run Code Online (Sandbox Code Playgroud)
然后打电话
power *= 2
Run Code Online (Sandbox Code Playgroud)
32次会溢出并导致异常.在斯威夫特,整数运算并不默默"环绕"在(Objective-)C,除非你明确地使用"溢出运营商" &*,&+等等.
可能的解决方案:
Int64而不是Int.power(不需要其结果).请注意,有一些更简单的方法可以将二进制数字字符串转换为数字,例如,请参阅如何在Swift中将二进制数转换为十进制数?.
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |