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。
我不明白为什么在这种情况下可以展开可选值:
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。