Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 先决条件V.S.投进斯威夫特_Swift_Throw - Fatal编程技术网

Swift 先决条件V.S.投进斯威夫特

Swift 先决条件V.S.投进斯威夫特,swift,throw,Swift,Throw,Swift中的前置条件和抛出有什么区别 考虑这种情况: func isRange(start: Int, end: Int, value: Bool) -> Bool { precondition(end > start, "Start greater than end") if end == start { return true } ... } V.S func isRange(开始:Int,结束:Int,值:Bool)抛出->B

Swift中的
前置条件
抛出
有什么区别

考虑这种情况:

func isRange(start: Int, end: Int, value: Bool) -> Bool {
    precondition(end > start, "Start greater than end")
    if end == start {
        return true
    }
    ...
}
V.S

func isRange(开始:Int,结束:Int,值:Bool)抛出->Bool{
如果(结束<开始){
抛出错误。IllegalArgumentException(原因:“开始大于结束”)
}
如果(结束==开始){
返回true//空范围匹配
}
...
}

您更喜欢哪一种?

主要的区别是您必须捕获异常,但不能捕获前置条件失败。@zneak我注意到在
前置条件
定义中有一条注释说:使用此函数可以检测必须阻止程序进行的条件,即使在装运代码中也是如此。使用这种方法的情况是什么?例如,Swift的数组使用
前提条件
来验证您的读取是否超出了范围。主要区别在于您必须捕获异常,但是无法捕获前置条件失败。@zneak我注意到在
前置条件
定义中有一条注释说:使用此函数检测必须阻止程序继续的条件,即使在装运代码中也是如此。使用这个的情况是什么?例如,Swift的数组使用
前提条件
来验证您的读数是否超出范围。
func isRange(start: Int, end: Int, value: Bool) throws -> Bool {
    if (end < start) {
        throw Error.IllegalArgumentException(reason: "Start greater than end")
    }
    if (end == start) {
        return true // empty range matches
    }
    ...
}