Dav*_*man 5 xcode let ios swift
我在看这个视频.在9:40左右,屏幕上有一些示例代码,如下面的代码:
//Sieve of Eratosthenes, as seen in WWDC 2015
func primes(n: Int) -> [Int] {
var numbers = [Int](2..<n)
for i in 0..<n-2 {
guard let prime = numbers[i] where prime > 0 else { continue }
for multiple in stride(from: 2 * prime-2, to: n-2, by: prime) {
numbers[multiple] = 0
print("\"numbers[i]")
}
}
return numbers.filter { $0 > 0 }
}
Run Code Online (Sandbox Code Playgroud)
当我在Xcode游乐场中键入它时,我收到以下错误:
条件绑定的初始化程序必须具有可选类型,而不是'Int.'
这是为什么?
这里的“问题”是陈述guard let prime = numbers[i]。编译器会抱怨它,因为guard let语法期望numbers[i]它是一个可以有条件解包的可选值。但这不是一个可选的,你总是能够Int从数组中检索第 i 个。
要修复它,只需写
let prime = numbers[i]
guard prime > 0 else { continue }
Run Code Online (Sandbox Code Playgroud)
then的正确用法stride如下所示(在评论中进行了长时间的搜索后):
for multiple in (2*prime-2).stride(to: n-2, by: 2*prime-2) {
Run Code Online (Sandbox Code Playgroud)
然后最后一步是改变print:
print("\(numbers[i])")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
919 次 |
| 最近记录: |