如何在Swift中返回带有边缘情况的单个值?

时间:2015-02-08 23:24:27

标签: ios macos swift

我应该返回一个可选值,如:

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.否则不允许使用负值。

2 个答案:

答案 0 :(得分:1)

如果使用assert并且调用者传递了无效参数,则它是不可恢复的错误/崩溃。调用者可能不知道可能导致断言的所有方式,即调用者不应该知道的内部逻辑。

真的唯一一次断言是有意义的是检查方法输入上的调用参数,即使在这种情况下,必须使用户明确知道什么是无效的,并且在方法的生命周期中永远不会更严格

由于这是关于Swift返回的,因此似乎最有意义,并且调用者将清楚必须处理可能的错误。可选项是Swift的一个主要特性,使用它们。

或者始终以atan()处理调用±0和±Inf的方式返回有用的结果。

答案 1 :(得分:0)

这取决于你想要函数的前提条件:如果它是一个错误,用负值调用它(或非正数;你的两个例子是矛盾的),然后使用断言并记录它。然后它成为合同的一部分,如果函数的用户不确定,它必须检查该值。或者,如果支持这些值更有意义并返回nil(例如,通常会使用此类值调用函数,并且nil不是典型用法的问题),请执行此操作...在不知道细节的情况下,不可能分辨哪个最合适,但我的猜测将是前者。