如何在 Swift 中创建一个优雅的 guard / return 语句来提供输出?

How to create an elegant guard / return statement in Swift that gives output?

例如,这个有效:

guard condition == true else { return }

这很好,但会造成静默失败。如果有一个静态函数可以在返回的同时输出反馈,那就太好了。类似于:

guard condition == true else { stop("condition was false") }

我是生活在梦境中吗,或者这可能吗?

当然,我承认以下是可能的:

guard condition == true else { 
    print("condition was false")
    return
}

但是样板很重而且有点丑。我到处都有保护语句,这种代码是:1.有用;但是 2. 会将我的代码批量化,比如至少增加 10%。

我知道这对我来说是乌托邦式的,但我更喜欢优雅的解决方案。有人吗?

这真的取决于你的功能是什么。通常带有 guard 语句的方法没有 return 值或 return 可选值。

func myReturn() -> String? {
    guard condition else { return nil }
}

如果你想要停止的模拟,那么,你可以抛出一个 Error,甚至 fatalError

func myReturn() throws -> String {
    guard condition else {
         throw BadConditionError
     }
}

func myReturn() -> String {
    guard condition else {
         fatalError("Bad condition")
     }
}

guard 是一种提前退出机制,它可以防止你的程序进入无效状态,相应地使用它。我还建议阅读 defer 机制。

尝试使用 closures 使其正常工作,即

func func1(handler: ((String)->())) {
    let condition = (2 == 2)
    guard condition == true else {
        handler("condition was false")
        return
    }
}

func1 { (reason) in
    print(reason)
}

据我了解,您想在 guard 中 return 之前在 false 条件或 nil 值上生成一些输出或显示消息。 以下是我的想法:

func checkForNil(value: Any?) -> Any?
    {
        if value == nil
        {
            //showMessage("Nil value...")
            print("nil value")
        }
        return value
    }

您可以如下使用:

guard let obj = self.checkForNil(value: objLoggedInUser) else { return}

使用precondition代替guard

func test() {
    precondition(yourCondition, "This is an error message")
    //rest of your function
}

如果 yourCondition 为 false,将退出作用域并打印错误消息。