为什么防护让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"
答案 0 :(得分:8)
guard
语句在return
子句中需要break
,continue
,throw
或else
。如果更正x?.description
中的可选项,编译器将指出此错误。在函数范围之外使用guard是没有意义的,因为它用于检查条件并在该范围无效时突破该范围。你会收到错误:
guard
身体可能无法通过。
它在游乐场(或在函数范围之外)有效的唯一方法是抛出错误。
保护声明的else子句是必需的,必须要么调用 标有noreturn属性或传输程序的函数 使用其中一个来控制守卫声明的封闭范围 以下陈述:
- 返回
- 休息
- 继续
- 掷