2017-06-16 75 views
-1

我收到错误“缺少函数返回'Bool'”但我找不到原因。返回一个函数中的Bool

func isPrime(_ number: Int) -> Bool { 
    for primeDivisors in 2..<number { 
     if number % primeDivisors == 0 { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

isPrime(13) 
+0

如果你调用'isPrime(1)'''for'循环将永远不会执行,并且函数永远不会碰到'return'语句。 – vacawama

回答

1

您的主要检查器不正确,因为循环的第一次迭代会返回一个值。在决定数字是否为素数之前,您必须经历整个循环。

func isPrime(_ number: Int) -> Bool { 
    for primeDivisors in 2..<number { 
     if number % primeDivisors == 0 { 
      return false 
     } 
    } 
    return true 
} 

注意,该代码是低效的,因为它继续检查整除的次数比是必要的:你可以停止在到达的number平方根检查。

+0

重要的是要注意你的“假”和“真”条件是正确的; OP的条件与他们应该得到的*相反。 – NRitH

+0

@NRitH这绝对是真的 - 这就是为什么我切换他们。谢谢! – dasblinkenlight

0

这是抱怨,因为不是所有的代码路径最终返回的东西。如果number小于2,会发生什么情况?然后您的for循环以及其中的返回语句将永远不会被调用,并且在for循环完成后没有return