繁体   English   中英

快速方法返回数组

[英]Swift method which returns array

因此,我对我的类和结构接口在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]() }

因此,我的问题是,什么时候以及为什么我应该采用哪种方法来组织界面? 有什么区别吗? 有指导原则吗?

根据情况,这三种方法均有效:

  • 当获取对象可能或不可能,并且不可能不一定表示错误时,请使用[Int]? 这使您可以区分空数组和根本没有数组。
  • 当获取对象必须始终是可能的,并且无法获取对象意味着您有错误时,请使用throws
  • 当无法获取对象总是被视为缺少对象时,请使用[Int]和一个空数组。

这只是我的意见,我没有任何指导方针或任何要抛弃的内容,但是...

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

func getAllObjectsFromSomewhere() -> [Int]?

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

func getAllObjectsFromSomewhere()-> [Int]?

如果要实现该功能,通常会使用此功能。

在正常情况下,您期望在数组中返回一些Int

如果由于某种原因没有元素,则返回nil ,然后您可以检查是否使用了guardif let

通常,空数组不足以真正开始引发异常,但这取决于具体情况。

func getAllObjectsFromSomewhere()引发-> [Int]

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

func getAllObjectsFromSomewhere()-> [Int]

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

当你打电话给你getAllObjectsFromSomewhere你仍然需要做一次检查,看看如果返回的数组实际上包含任何东西( if getAllObjectsFromSomewhere().count > 0 )你决定做什么....为什么不使用前guard或者if let该?

如前所述,这只是我对这三种情况的想法,希望您可以使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM