Swift: 无法在循环内解包可选

Swift: Can't unwrap an optional inside a loop

我不明白为什么在这种情况下可以展开可选值:

let name: String? = "Toto"
guard let name = name else { fatalError() }
print(name)

但当此代码段包含在 for 循环中时则不然:

for _ in 0..<100 {
  let name: String? = "Toto"
  guard let name = name else { fatalError() }
  print(name)
}

我收到错误 "Definition conflicts with previous value"。

在 Xcode 11.0.

中使用 Swift 5

中所述
let name: String? = "Toto"
guard let name = name else { fatalError() }

无效,因为 guard 没有引入新的作用域,并且在同一作用域中不能有两个同名的变量。

这在文件级别(即在“main.swift”)编译是一个错误。显然,通过 guard 绑定的变量隐藏了另一个同名变量,无论它们的类型和声明顺序如何:

let aName = "Toto"
guard let aName = Int("123") else { fatalError() }
print(aName) // 123

guard let bName = Int("123") else { fatalError() }
let bName = "Toto"
print(bName) // 123

此错误已报告为 SR-1804 No compiler error for redeclaration of variable bound by guard