Swift 先决条件V.S.投进斯威夫特
Swift中的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
前置条件
和抛出
有什么区别
考虑这种情况:
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
}
...
}