如何在 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,将退出作用域并打印错误消息。
例如,这个有效:
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,将退出作用域并打印错误消息。