Swift Playground错误:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

时间:2015-11-28 04:28:45

标签: xcode swift

使用Playground Xcode 7.1.1中的以下代码获取上述错误:

import Cocoa

func countDivisors(number:Int) -> Int
{
    var c = 0
    for i in 1 ... number
    {
        if number % i == 0 { ++c }
    }
    return c
}

func isPrime(number:Int) -> Bool
{
    return countDivisors(number) == 2
}

isPrime(2);

for i in 0 ..< 100
{
    var f:Bool = isPrime(i)
    print("\(i): \(f)")
}

错误发生在

行上
var f:Bool = isPrime(i)

我已经重新安装了Xcode,但仍然出现错误。有谁知道这背后的原因?

2 个答案:

答案 0 :(得分:2)

获得“EXC_BAD_INSTRUCTION”的原因是因为for循环的范围运算符无法形成结束值为0的范围。范围运算符的结束值应大于或等于起始值。

来自apple docs,

  

闭区域运算符(a ... b)定义从a到b的范围,包括值a和b。 a的值不得大于b。

这将有效

for i in 1...1 {
   //--  
}

但不是这个

for i in 1...0 {
  //--  
}

答案 1 :(得分:0)

当调用行var f:Bool = isPrime(i)时,i的初始值为0,除以零给出未知值。最好将循环更改为for i in 1 ..< 100