Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS Swift-某些设备上的EXC_BAD_指令_Ios_Swift_Crash_Exc Bad Instruction - Fatal编程技术网

iOS Swift-某些设备上的EXC_BAD_指令

iOS Swift-某些设备上的EXC_BAD_指令,ios,swift,crash,exc-bad-instruction,Ios,Swift,Crash,Exc Bad Instruction,我对Swift和iOS开发非常陌生,但我遇到了一个错误,导致我的应用程序在以下设备上运行时崩溃: iPhone4S iPhone5 iPad2 iPad视网膜 以下是正在标记的代码: // bin2dec - converts binary string into decimal string func bin2dec(input: String) -> String { var counter = countElements(input) var digit: Chara

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

iPhone4S iPhone5 iPad2 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)

任何帮助都将不胜感激,谢谢

iphone4s、iphone5、ipad2和ipadretina都是32位设备,其中Int 是32位整数。因此从

var power = 1
然后打电话

power *= 2
32次将溢出并导致异常。在Swift中,整数运算不会像Objective-C中那样自动环绕, 除非明确使用溢出运算符&*、&+等

可能的解决办法:

使用Int64而不是Int。 避免结果不正确的幂的最终乘法 需要。 请注意,有更简单的方法来转换二进制字符串
将数字转换为数字,请参见示例。

iPhone 4S、iPhone 5、iPad 2、iPad视网膜是32位设备,其中Int 是32位整数。因此从

var power = 1
然后打电话

power *= 2
32次将溢出并导致异常。在Swift中,整数运算不会像Objective-C中那样自动环绕, 除非明确使用溢出运算符&*、&+等

可能的解决办法:

使用Int64而不是Int。 避免结果不正确的幂的最终乘法 需要。 请注意,有更简单的方法来转换二进制字符串
例如,请参见。

什么输入杀死它,在哪一行?哦,是的,当然,在带大小写0的行上的开关内:当它接收到完整的32位字符串时,例如11111111111111111111111,什么输入杀死它,在哪一行?哦,是的,当然,在交换机内部,在第0种情况下:当它接收到完整的32位字符串(例如11111111111111111111111111)时,可能值得注意的是,在当前的64位设备上,问题仍然存在,但字符串的长度是原来的两倍。也可能值得注意的是,在当前的64位设备上,问题仍然存在,但弦的长度是原来的两倍。