Xcode Swift游乐场错误:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0)

Xcode Swift游乐场错误:EXC_BAD_指令(代码=EXC_I386_INVOP,子代码=0x0),xcode,swift,Xcode,Swift,在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(

在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)")
}

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

当调用行
var f:Bool=isPrime(i)
时,i的初始值为0,除以0给出一个未知值。最好将1..<100

中的i的循环更改为
,因为for循环的range运算符不能形成一个结束值为0的范围,所以会出现“EXC\u BAD\u指令”。范围运算符的结束值应大于或等于开始值

从苹果文档

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

这会奏效的

for i in 1...1 {
   //--  
}
但不是这个

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

零是问题所在,但不是因为被零除的缘故。请参见下面RP的答案了解发生了什么。边节点:测试应该从2开始,当i>=数字的平方根时停止。当您测试数字10000时,测试将在1%的时间后完成。
for i in 1...0 {
  //--  
}