如何判断Swift中是否打开了断言?

时间:2015-03-20 10:07:32

标签: swift assertions

我们说我有这样的功能:

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。显示一个空白对象就足够了这种罕见的情况。)

我如何实现这一目标?

1 个答案:

答案 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()
    }
}