加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – guard在swift 2.0 playground中获取有关可选绑定的错误…

发布时间:2020-12-14 19:17:25 所属栏目:百科 来源:网络整理
导读:我正在观看 this video.在9:40左右,屏幕上有一些示例代码,如下面的代码所示: //Sieve of Eratosthenes,as seen in WWDC 2015func primes(n: Int) - [Int] {var numbers = [Int](2..n)for i in 0..n-2 { guard let prime = numbers[i] where prime 0 else {
我正在观看 this video.在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 }
}

当我在Xcode游乐场中键入它时,我收到以下错误:

Initializer for conditional binding must have Optional type,not ‘Int.’

这是为什么?

解决方法

这里的“问题”是声明保护让prime = numbers [i].编译器抱怨它,因为guard let语法要求numbers [i]是一个可选的,它可以有条件地解包.但它不是可选的,你总是可以从数组中检索第i个Int.

修复它只需写

let prime = numbers[i]
guard prime > 0 else { continue }

然后正确使用步幅如下(在评论中长时间搜索之后):

for multiple in (2*prime-2).stride(to: n-2,by: 2*prime-2) {

然后最后一块是改变印刷品:

print("(numbers[i])")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读