当前位置: 首页 > 知识库问答 >
问题:

在 else 保护语句块中使用断言

茅华灿
2023-03-14

我在谷歌分析的实施说明中遇到了这个问题:

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

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

编辑:这是在函数应用程序(_: didFinishLaunchingWithOptions)-

编辑2:我在这上面找到的其他信息回答了这个问题:

不幸的是,一旦你做了一个发布构建,这将被打破,因为断言在发布配置中被移除,并且一个保护块必须结束当前作用域的执行。

https://help . insight . com/app/answers/detail/a _ id/120/~/integrating-Google-analytics-into-IOs-apps-using-swift-4


共有2个答案

刘胜泫
2023-03-14

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

孔征
2023-03-14

通常,保护语句将使用下列语句之一:

    < li >返回 < li >中断 < li >继续 < li >投掷

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

这就是致命的错误发挥作用的地方。您甚至可以使用“从不”返回类型创建自己的自定义自定义类型。

到了OP点,它将在调试中编译,但在发布版本中失败。

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

guard let gai = GAI.sharedInstance() else {
    fatalError("Google Analytics not configured correctly")
}
 类似资料:
  • 问题内容: 为什么SQL Server坚持认为临时表已经存在!一个或另一个将会发生!,所以永远不会这样。 错误是:数据库中已经有一个名为“#temp1”的对象。 有没有解决这个问题的优雅方法?如果@checkvar为null,我要整个表,否则,只给我其中@checkvar =某物的值 编辑:该列是varchar,而不是int。 问题答案: 您不能只重写语句吗?

  • 我有一个xslt文档。我想在这个文档中使用if语句。我的代码是: 如果返回的值是code1然后写A,如果返回的值是code2然后写B。 我该怎么做?

  • //在guard语句中首先执行let,然后执行bool检查,会导致编译错误 //先执行布尔检查,然后让它工作 上面的两种说法似乎与我的说法相同。为什么在第一种情况下它不起作用?

  • 这里有一段代码: 它现在查找具有或日期在之后的的票据。我想改变这个。

  • 本文向大家介绍浅谈Python的条件判断语句if/else语句,包括了浅谈Python的条件判断语句if/else语句的使用技巧和注意事项,需要的朋友参考一下 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。 比如,输入用户的年龄,根据年龄打印不同的内容。。。 Python程序中,能让计算机自己作出判断的语句就是if语句: 例: 根据python的缩进规则,如果if语句的条件判断为Tr

  • Swift 条件语句 一个 if 语句 后可跟一个可选的 else if...else 语句,else if...else 语句 在测试多个条件语句时是非常有用的。 当你使用 if , else if , else 语句时需要注意以下几点: if 语句后可以有 0 个或 1 个 else,但是如果 有 else if 语句,else 语句需要在 else if 语句之后。 if 语句后可以有 0