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

Ios 如何在Swift中创建一个优雅的guard/return语句来提供输出?,ios,swift,return,guard,Ios,Swift,Return,Guard,例如,这项工作: guard condition == true else { return } 这很好,但会造成无声的失败。最好是有一个静态函数,可以在返回的同时输出反馈。比如: guard condition == true else { stop("condition was false") } 我是生活在这里的梦境中,还是可能 当然,我认识到以下是可能的: guard condition == true else { print("condition was false")

例如,这项工作:

guard condition == true else { return }
这很好,但会造成无声的失败。最好是有一个静态函数,可以在返回的同时输出反馈。比如:

guard condition == true else { stop("condition was false") }
我是生活在这里的梦境中,还是可能

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

guard condition == true else { 
    print("condition was false")
    return
}
但样板很重,而且有点难看。我在每个地方都有guard语句,这种代码是:1。有用的但是2。我的代码至少会增加10%


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

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

func myReturn() -> String? {
    guard condition else { return nil }
}
如果你想模拟stop,你可以抛出一个
错误,甚至是一个
fatalError

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


guard
是一种早期退出机制,它防止您的程序进入无效状态,请相应地使用它。我还建议您阅读《延时》机制。

这实际上取决于您的功能是什么。通常带有
guard
语句的方法没有返回值或返回选项

func myReturn() -> String? {
    guard condition else { return nil }
}
如果你想模拟stop,你可以抛出一个
错误,甚至是一个
fatalError

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


guard
是一种早期退出机制,它防止您的程序进入无效状态,请相应地使用它。我还建议阅读
延迟
机制。

尝试使用
闭包
使其工作,即

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

func1 { (reason) in
    print(reason)
}

尝试使用
闭包
使其工作,即

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

func1 { (reason) in
    print(reason)
}

据我所知,在返回到guard之前,您希望在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}

据我所知,在返回到guard之前,您希望在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}
使用而不是
防护装置

func test() {
    precondition(yourCondition, "This is an error message")
    //rest of your function
}
如果
yourCondition
为false,则将退出作用域并打印错误消息。

使用而不是
guard

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


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

谢谢@inokey。但是,如果这不是一个错误,又会发生什么呢?我的大部分守卫都不会出错。如果是那样的话,我应该闭嘴接受印刷品;返回编队?@JosephBeuys'Mum在大多数情况下,您只需按原样编写它,
guard condition,否则{return}
。事实上,这是防止出现故障的一般规则,可以在许多程序员的许多Swift代码中看到。我知道@inokey,我昨天没有启动Swift。在我看来,这只是次优而已。我想我想知道是否有人知道是否有可能编写一个可爱的静态函数,返回一个return。我不是来这里获取情感@inokey的,让我们试着保持文明。我不认为必须查找一个短的静态函数就意味着过于复杂。这似乎是一种意见分歧,而不是别的什么。有时,我不得不花时间找出是哪个
guard->return
导致某些VC停止工作,通常比查找一个简短的静态函数所需的时间要长。感谢您抽出时间来参加我们的活动respond@JosephBeuys妈妈,如果我的语气显得很吓人,我真的很抱歉。无论如何,我并不想让你觉得你的意见无关紧要。我很抱歉让你有这种感觉。我真的感觉到你想让事情变得更好并支持它。谢谢@inokey。但是,如果这不是一个错误,又会发生什么呢?我的大部分守卫都不会出错。如果是那样的话,我应该闭嘴接受印刷品;返回编队?@JosephBeuys'Mum在大多数情况下,您只需按原样编写它,
guard condition,否则{return}
。事实上,这是防止出现故障的一般规则,可以在许多程序员的许多Swift代码中看到。我知道@inokey,我昨天没有启动Swift。在我看来,这只是次优而已。我想我想知道是否有人知道是否有可能编写一个可爱的静态函数,返回一个return。我不是来这里获取情感@inokey的,让我们试着保持文明。我不认为必须查找一个短的静态函数就意味着过于复杂。这似乎是一种意见分歧,而不是别的什么。有时,我不得不花时间找出是哪个
guard->return
导致某些VC停止工作,通常比查找一个简短的静态函数所需的时间要长。感谢您抽出时间来参加我们的活动respond@JosephBeuys妈妈,如果我的语气显得很吓人,我真的很抱歉。无论如何,我并不想让你觉得你的意见无关紧要。我很抱歉让你有这种感觉。我真的感觉到你想让事情变得更好并支持它。谢谢你的输入@PGDev,但这似乎比简单地打印和返回更糟糕。你要求返回解决方案,对吗?打印只是使用该原因的一种方式。感谢您的输入@PGDev,但这似乎比简单地打印()并返回更糟糕。您要求返回解决方案,对吗?打印只是使用这个理由的一种方式。简单地抛出一个错误怎么样?简单地抛出一个错误怎么样?这是一个可爱的解决方案@Hardik Darji,谢谢你,但正如我已经承诺的,我已经接受了上面对inokey的回答(有一个警告)恐怕我不会接受。谢谢@JosephBeuys的妈妈,如果你能投票的话,将是gr8:)这是一个可爱的解决方案@Hardik Darji,谢谢你,但正如我已经向上面的inokey承诺我接受的答案(o