像if
语句一样,guard
的执行取决于一个表达式的布尔值。我们可以使用guard
语句来要求条件必须为真时,以执行guard
语句后的代码。不同于if
语句,一个guard
语句总是有一个else
分句,如果条件不为真则执行else
分局中的代码。
func greet(person: [String: String]) { guard let name = person["name"] else { return } print("Hello (name)") guard let location = person["location"] else { print("I hope the weather is nice near you.") return } print("I hope the weather is nice in (location).") } greet(["name": "John"]) // prints "Hello John!" // prints "I hope the weather is nice near you." greet(["name": "Jane", "location": "Cupertino"]) // prints "Hello Jane!" // prints "I hope the weather is nice in Cupertino."
如果guard
语句的条件被满足,则在保护语句的封闭大括号结束后继续执行代码。任何使用了可选绑定作为条件的一部分并被分配了值的变量或常量对于剩下的保护语句出现的代码段是可用的。
如果条件不被满足,在else
分支上的代码就会被执行。这个分支必须转移控制以退出guard
语句出现的代码段。它可以用控制转移语句如return
,break
或continue
做这件事,或者它调用了一个不返回的方法或函数,例如fatalError()
。
相比于可以实现同样功能的if
语句,按需使用guard
语句会提升我们代码的可靠性。 它可以使你的代码连贯的被执行而不需要将它包在else
块中,它可以使你处理违反要求的代码接近要求。