iOS Swift – 某些设备上的EXC_BAD_INSTRUCTION

我对Swift和iOS开发很陌生,但遇到了一个错误,导致我的应用程序在以下设备上运行时崩溃:

iPhone 4S 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次会溢出并导致exception。 在Swift中,除非明确地使用“溢出运算符” &*&+等,否则整数运算不会像(Objective-)C那样静静地“绕回”。

可能的解决scheme:

  • 使用Int64而不是Int
  • 避免power的最后乘法(其结果是不需要的)。

请注意,有一个简单的方法来将一串二进制数字转换为数字,请参阅示例如何将一个二进制转换为十进制的Swift? 。