以下代码从 guard let details
返回,但它不会执行其他打印状态。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let testDictionary:[String:AnyObject] = ["a":NSMutableArray()]
let result = testDictionary["C"]
print("Before details Check")
guard let details = result where details.isKindOfClass(NSArray) else {
return false
}
print("Returned Result \(details)")
print("After Details Check")
return true
}
为什么gaurd之后的陈述没有被执行?我做错了什么?
答案 0 :(得分:0)
使用一个键为“a”的项创建测试词典。然后你从同一个字典中用“C”键询问一个对象。 “细节”当然是零,所以你回复假。

答案 1 :(得分:0)
来自Swift文档中的"Statements":
退回声明
return
语句出现在函数或方法的主体中 定义并导致程序执行返回调用 功能或方法。
和
警卫声明
guard
语句用于将程序控制转移到范围之外 如果不符合一个或多个条件。
...
保护声明的else
子句是必需的,必须要么调用 标有noreturn属性或传输程序的函数 在守卫声明的封闭范围之外控制......
如果guard let details =
条件失败,则return
"立即"从当前函数返回。你不能简单
继续因为details
未定义。这正是如此
guard
语句用于。
您可以通过引入本地范围来解决您的问题:
print("Before details Check")
checkLabel: do {
guard let details = result where details.isKindOfClass(NSArray) else {
break checkLabel
}
print("Returned Result \(details)")
}
print("After details Check")
此处,break checkLabel
在do
- 范围之后继续执行if
条件失败。
但更简单的方法是使用if-let
代替guard-let
:
print("Before details Check")
if let details = result where details.isKindOfClass(NSArray) {
print("Returned Result \(details)")
}
print("After details Check")