如何在 Swift 中 return 具有边缘情况的单个值?
How to return a single value with edge cases in Swift?
我应该 return 一个可选值,例如:
func someFunc(#num: Int) -> Obj? {
if num < 0 {
return nil
}
...
}
或者直接使用assert
:
func someFunc(#num: Int) -> Obj {
assert(num >= 0, "Number should greater or equal then zero")
...
}
编辑:现在两种情况下的条件相同,数字应大于或等于 0。不允许使用负值。
这取决于您希望函数的前提条件是什么:如果它是一个错误,请使用负值(或非正数;您的两个示例是矛盾的)调用它,然后使用 assert 和 document这个。然后它成为合同的一部分,如果不确定,函数的用户必须检查值。或者,如果支持这些值和 return nil
更有意义(例如,通常会使用此类值调用函数,而 nil
对于该典型用途来说不是问题),而不是那样做……在不知道细节的情况下,不可能说出哪个最适合,但我的猜测是前者。
如果您使用断言并且调用者传递了一个无效参数,则它是不可恢复的 error/crash。调用者可能不知道引起断言的所有方式,即调用者不应该知道的内部逻辑。
真正唯一有意义的断言是检查方法入口的调用参数,即使在那种情况下,也必须向用户明确说明什么是无效的,并且在方法。
因为这是关于 Swift return 一个 Optional 似乎最有意义,并且调用者很清楚必须处理可能的错误。 Optionals 是 Swift 的一个主要特性,使用它们。
或者总是 return 有用的结果 atan()
处理用 ±0 和 ±Inf 调用的方式。
我应该 return 一个可选值,例如:
func someFunc(#num: Int) -> Obj? {
if num < 0 {
return nil
}
...
}
或者直接使用assert
:
func someFunc(#num: Int) -> Obj {
assert(num >= 0, "Number should greater or equal then zero")
...
}
编辑:现在两种情况下的条件相同,数字应大于或等于 0。不允许使用负值。
这取决于您希望函数的前提条件是什么:如果它是一个错误,请使用负值(或非正数;您的两个示例是矛盾的)调用它,然后使用 assert 和 document这个。然后它成为合同的一部分,如果不确定,函数的用户必须检查值。或者,如果支持这些值和 return nil
更有意义(例如,通常会使用此类值调用函数,而 nil
对于该典型用途来说不是问题),而不是那样做……在不知道细节的情况下,不可能说出哪个最适合,但我的猜测是前者。
如果您使用断言并且调用者传递了一个无效参数,则它是不可恢复的 error/crash。调用者可能不知道引起断言的所有方式,即调用者不应该知道的内部逻辑。
真正唯一有意义的断言是检查方法入口的调用参数,即使在那种情况下,也必须向用户明确说明什么是无效的,并且在方法。
因为这是关于 Swift return 一个 Optional 似乎最有意义,并且调用者很清楚必须处理可能的错误。 Optionals 是 Swift 的一个主要特性,使用它们。
或者总是 return 有用的结果 atan()
处理用 ±0 和 ±Inf 调用的方式。