我们说我有这样的功能:
func findFooById(id: String) -> Foo {
if let foo = fooList[id] {
return foo
} else {
assertionFailure("Couldn't find a foo with id = \(id)")
}
}
在调试版本中,我希望我的断言触发,因此我发现我的服务器向我发送不一致的数据这一事实。但是在发布版本中,我想返回一个空的foo(return Foo(id: "", name: "", magic: nil)
)来保持我的UI一致。
(我不希望重新定义findFooById
以返回Foo?
,因为这会迫使我在每个调用者中处理nil。显示一个空白对象就足够了这种罕见的情况。)
我如何实现这一目标?
答案 0 :(得分:0)
如another Stack Overflow answer中所述,您可以根据处于调试/释放模式设置标志,这样您就可以执行以下操作:
#if DEBUG
assertionFailure("Couldn't find a foo with id = \(id)")
#else
return Foo()
#endif
但是,由于assertionFailure
is a no-op in optimised builds(默认情况下发布版本),您应该可以这样做:
func findFooById(id: String) -> Foo {
if let foo = fooList[id] {
return foo
} else {
assertionFailure("Couldn't find a foo with id = \(id)")
return Foo()
}
}