我应该返回一个可选值,如:
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.否则不允许使用负值。
答案 0 :(得分:1)
如果使用assert并且调用者传递了无效参数,则它是不可恢复的错误/崩溃。调用者可能不知道可能导致断言的所有方式,即调用者不应该知道的内部逻辑。
真的唯一一次断言是有意义的是检查方法输入上的调用参数,即使在这种情况下,必须使用户明确知道什么是无效的,并且在方法的生命周期中永远不会更严格
由于这是关于Swift返回的,因此似乎最有意义,并且调用者将清楚必须处理可能的错误。可选项是Swift的一个主要特性,使用它们。
或者始终以atan()
处理调用±0和±Inf的方式返回有用的结果。
答案 1 :(得分:0)
这取决于你想要函数的前提条件:如果它是一个错误,用负值调用它(或非正数;你的两个例子是矛盾的),然后使用断言并记录它。然后它成为合同的一部分,如果函数的用户不确定,它必须检查该值。或者,如果支持这些值更有意义并返回nil
(例如,通常会使用此类值调用函数,并且nil
不是典型用法的问题),请执行此操作...在不知道细节的情况下,不可能分辨哪个最合适,但我的猜测将是前者。