正确使用 Swift Guard 关键字?

Proper Use of the Swift Guard Keyword?

我一直在查找如何在 Swift 中使用 guard 关键字。最近一位开发人员告诉我,如果闭包中没有错误,下面的代码将打印 "success"

for attachment in attachments! {
    attachment.fetchData { (data, error) in 
        guard let error = error else {
            print(“success”)
            return
        }

        print(error.localizedDescription)
}

我对他的说法有点困惑。在阅读了 Apple 的 closure 和 guard 关键字文档后,在我看来他的代码只有在 出现错误 .

时才会打印出 "success"

我感觉他用反了,但我可能错了。 谁能帮我分解一下,并解释一下在有或没有错误时是否打印成功

谢谢。

使用 guard 解包错误是非常具有误导性的。您应该使用它来解包数据并确保没有错误,并在出现错误时提前退出您的方法。

只需将您的守卫声明更改为:

guard let data = data, error == nil else { 
    print(error ?? "") 
    return
}