iOS Swift - EXC_BAD_INSTRUCTION 在某些设备上
iOS Swift - EXC_BAD_INSTRUCTION on certain devices
我是 Swift 和 iOS 开发的新手,但我遇到了一个错误,导致我的应用程序在以下设备上 运行 时崩溃:
iPhone4S
iPhone 5
iPad 2
iPad视网膜
这是被标记的代码:
// 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)"
}
错误是:
Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
任何帮助将不胜感激,谢谢!
iPhone 4S, iPhone 5, iPad 2, iPad Retina 是 32 位设备,其中 Int
是一个 32 位整数。因此从
开始
var power = 1
然后调用
power *= 2
32次会溢出导致异常。在 Swift 中,整数运算不会像在 (Objective-)C 中那样默默地 "wrap around",
除非您明确使用 "overflow operators" &*
、&+
等
可能的解决方案:
- 使用
Int64
代替 Int
。
- 避免
power
的最终乘法(其结果不是
需要)。
请注意,有更简单的方法可以将字符串转换为二进制
数字到数字,例如 How to convert a binary to decimal in Swift?.
我是 Swift 和 iOS 开发的新手,但我遇到了一个错误,导致我的应用程序在以下设备上 运行 时崩溃:
iPhone4S iPhone 5 iPad 2 iPad视网膜
这是被标记的代码:
// 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)"
}
错误是:
Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)
任何帮助将不胜感激,谢谢!
iPhone 4S, iPhone 5, iPad 2, iPad Retina 是 32 位设备,其中 Int
是一个 32 位整数。因此从
var power = 1
然后调用
power *= 2
32次会溢出导致异常。在 Swift 中,整数运算不会像在 (Objective-)C 中那样默默地 "wrap around",
除非您明确使用 "overflow operators" &*
、&+
等
可能的解决方案:
- 使用
Int64
代替Int
。 - 避免
power
的最终乘法(其结果不是 需要)。
请注意,有更简单的方法可以将字符串转换为二进制 数字到数字,例如 How to convert a binary to decimal in Swift?.