2

我在 Google Analytics 的实施说明中遇到了这个:

guard let gai = GAI.sharedInstance() else {
    assert(false, "Google Analytics not configured correctly")
}

我从没想过可以在 else 子句中进行断言,而无需返回。这对我来说没有意义,因为断言只会在测试方案中进行评估。那么,为什么编译器不警告它不返回(在发布版本的情况下)。

编辑:这是在函数内application(_:didFinishLaunchingWithOptions) -> Bool

编辑2:我在此找到的附加信息可以回答它:

不幸的是,一旦您进行发布构建,这就会中断,因为在发布配置中删除了断言,并且保护块必须结束当前范围的执行。

https://help.insight.com/app/answers/detail/a_id/120/~/integrating-google-analytics-into-ios-apps-using-swift-4

4

2 回答 2

10

通常,guard 语句将使用以下内容之一:

  • 返回
  • 休息
  • 继续

但是,您也可以使用非返回函数

这就是fatalError发挥作用的地方。您甚至可以使用Never返回类型创建自己的自定义。

到 OP 点,它将在调试中编译,但在发布构建中失败。

在此处输入图像描述

OP 可以重写为以下内容并使其工作:

guard let gai = GAI.sharedInstance() else {
    fatalError("Google Analytics not configured correctly")
}
于 2019-02-11T21:11:09.170 回答
2

在 DEBUG 中,由于断言条件为假,它总是在此时停止程序(断言失败)。所以构建成功。
在 RELEASE 中,此代码的编译将失败

于 2019-02-11T21:18:23.500 回答