Swift 区别于;前提条件“;及;断言;斯威夫特?

Swift 区别于;前提条件“;及;断言;斯威夫特?,swift,Swift,Swift中的前置条件(条件:Bool,消息:String)和断言(条件:Bool,消息:String)之间有什么区别 我觉得他们两个看起来都一样。在哪种情况下,我们应该使用一个而不是另一个?在发布模式下,前提条件处于活动状态,因此当您发布应用程序且前提条件失败时,应用程序将终止。 默认情况下,Assert仅在调试模式下工作 当我在Nhipster上使用它时,我发现了一个很好的解释: 断言是从古典逻辑中借用的概念。在逻辑上,, 断言是关于证明中命题的陈述。在里面 在编程中,断言表示程序员所做的假

Swift中的
前置条件(条件:Bool,消息:String)
断言(条件:Bool,消息:String)
之间有什么区别


我觉得他们两个看起来都一样。在哪种情况下,我们应该使用一个而不是另一个?

在发布模式下,
前提条件处于活动状态,因此当您发布应用程序且前提条件失败时,应用程序将终止。
默认情况下,
Assert
仅在调试模式下工作

当我在Nhipster上使用它时,我发现了一个很好的解释:

断言是从古典逻辑中借用的概念。在逻辑上,, 断言是关于证明中命题的陈述。在里面 在编程中,断言表示程序员所做的假设 关于申报地的申请

当以先决条件和后决条件的身份使用时 在开头和结尾描述对代码状态的期望 方法或函数的执行结束时,断言形成契约。 断言还可以用于在运行时强制执行条件,例如 在某些先决条件失败时阻止执行的命令

前提条件

检查向前推进的必要条件

  • 使用此功能可检测必须阻止程序运行的条件 即使在运输代码中也不允许继续
  • 在操场和-Onone构建中(Xcode调试的默认设置 配置):如果条件评估为false,则停止程序 打印消息后以可调试状态执行
  • In-O构建(Xcode发布配置的默认设置):如果 条件计算为false,停止程序执行
  • 在已检查的构建中,不计算条件,而是计算优化器 可以假设它的计算结果为真。不满足 假设未检查的版本是一个严重的编程错误
  • 断言

    带有可选消息的传统C风格断言

  • 将此功能用于在运行期间处于活动状态的内部健全性检查 测试但不影响装运代码的性能。查证 在发布版本中使用无效;见前提条件

  • 在操场和-Onone构建中(Xcode调试的默认设置 配置):如果条件评估为false,则停止程序 打印消息后以可调试状态执行

  • In-O构建(Xcode发布配置的默认版本), 不评估条件,也没有影响
  • 在已检查的构建中,不计算条件,而是计算优化器 可以假设它的计算结果为真。不满足 假设未经检查的构建是一个严重的编程错误

  • assert
    用于测试过程中的健全性检查,而
    predition
    用于防止发生可能意味着程序无法正常运行的情况


    因此,例如,您可以在一些具有合理结果(比如在某些范围内)的计算上放置一个
    assert
    ,以快速查找是否存在错误。但是你不想附带它,因为越界结果可能是有效的,并且不是关键的,所以不应该使你的应用程序崩溃(假设你只是用它在进度条中显示进度)

    另一方面,在获取元素时检查数组上的下标是否有效是一个前提条件。当请求无效的下标时,数组对象没有合理的下一步操作,因为它必须返回非可选值

    文档全文(在Xcode中尝试单击
    assert
    predition
    ):

    前提条件

    检查向前推进的必要条件

    使用此功能可检测必须防止故障的情况 即使在运输代码中,程序也不能继续运行

    • 在操场和-Onone构建中(Xcode调试的默认设置 配置):如果
      条件
      的计算结果为false,则停止程序 打印
      消息后在可调试状态下执行

    • In-O构建(Xcode版本配置的默认设置): 如果
      条件
      的计算结果为false,则停止程序执行

    • 在已检查的生成中,
      条件
      不会被计算,但 优化器可能假设它的计算结果为
      true
      。失败 在检查过的构建中满足这一假设是一个严重的问题 编程错误

    断言

    带有可选消息的传统C风格断言

    将此功能用于活动的内部健全性检查 在测试期间,但不影响装运代码的性能。 检查发布版本中的无效用法;请参阅
    前提条件

    • 在操场和-Onone构建中(Xcode调试的默认设置 配置):如果
      条件
      的计算结果为false,则停止程序 打印
      消息后在可调试状态下执行

    • In-O构建(Xcode发布配置的默认版本),
      条件
      未被评估,并且没有影响

    • 在已检查的生成中,
      条件
      不会被计算,但 优化器可能假设它的计算结果为
      true
      。失败 在检查过的构建中满足这一假设是一个严重的问题 编程错误

    我发现这很有帮助

                            debug   release   release
    function                -Onone  -O       -Ounchecked
    assert()                YES     NO        NO
    assertionFailure()      YES     NO        NO**
    precondition()          YES     YES       NO
    preconditionFailure()   YES     YES       YES**
    fatalError()*           YES     YES       YES
    
    来自

    –断言:检查您自己的代码是否存在内部错误

    –前提条件:检查您的客户是否为您提供了有效的论据


    此外,您还需要小心使用什么,请参见

    只想添加我的2美分。您可以在代码中添加任意数量的断言。你可以把你的钱寄出去
    func assert(condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = default, line: UWord = default)
    
                            debug   release   release
    function                -Onone  -O       -Ounchecked
    assert()                YES     NO        NO
    assertionFailure()      YES     NO        NO**
    precondition()          YES     YES       NO
    preconditionFailure()   YES     YES       YES**
    fatalError()*           YES     YES       YES