返回数组的Swift方法

时间:2016-09-06 13:07:15

标签: ios swift

所以,我有一个关于我的类和结构接口在Swift中应该是什么样子的问题。 例如,我有一个类或结构,它有方法:

func getAllObjectsFromSomewhere() -> [Int]

但是,想象一下这个方法并不总是返回一些Int数组,所以几乎没有办法处理它。

  • func getAllObjectsFromSomewhere() -> [Int]?
  • func getAllObjectsFromSomewhere() throws -> [Int]使用以下类型引用自定义ErrorType:NotFound或EmptyArray
  • func getAllObjectsFromSomewhere() -> [Int] { /* some code and then just return an empty Int array */ return [Int]() }

所以,我的问题是,何时以及为什么我应该采用哪种方法来组织界面?这有什么不同吗?有没有指导方针?

2 个答案:

答案 0 :(得分:2)

根据具体情况,所有这三种方法都是有效的:

  • 获取对象时可能会或可能不会,并且不可能并不一定意味着错误,请使用[Int]?。这使您可以区分空数组和根本没有数组。
  • 如果始终可以获取对象,并且无法获取对象意味着您有错误,请使用throws
  • 如果无法获取对象,则应始终将其视为缺少对象,请使用[Int]和空数组。

答案 1 :(得分:1)

这只是我的意见,我没有任何指导或任何东西可以抛弃它,但是......

开箱即用我认为这是选项的完美案例,这意味着这个签名:

func getAllObjectsFromSomewhere() -> [Int]?

但是(一如既往:))这取决于具体情况。以下是我对您的方案的看法。

func getAllObjectsFromSomewhere() - > [INT]?

如果我要实现该功能,这就是我通常使用的。

您有一个正常的情况,您希望在数组中返回一些Int

如果由于某种原因没有元素,那么您会收到nil作为回报,然后您可以使用guardif let进行检查。

通常情况下,空数组不足以成为实际开始抛出异常的理由,但当然这取决于具体情况。

func getAllObjectsFromSomewhere()throws - > [INT]

但是,如果你真的希望你的getAllObjectsFromSomewhere 必须返回一个值,那么如果由于某些原因没有任何内容,则抛出错误是有意义的返回。

func getAllObjectsFromSomewhere() - > [INT]

这是我最不喜欢的解决方案。

当你调用getAllObjectsFromSomewhere时,你还需要检查一下,看看返回的数组是否确实包含任何内容(if getAllObjectsFromSomewhere().count > 0),然后再决定做什么....为什么不使用{{ 1}}或guard为此?

如上所述,这只是我对这三种情况的看法,希望你能使用它们。