为什么守卫让x = x在一个方法内的行为与外部不同?为什么警卫让x = x表现出不同的范围行为?
下面的示例代码被从Playground复制出来。
var x:Int? = 3
func foo(x: Int?) {
guard let x = x else {
return
}
print(x) // print "3\n"
}
foo(x)
guard let x = x else {
throw NSError(domain: "app", code: 0, userInfo: nil)
}
print(x) // print "Optional(x)\n"
我仍然看到其投射不同的范围的行为。请参阅编辑的文章 – Boon
Swift民间证实了这一点 - 显然这是一个编译器错误。 – Boon