【问题标题】:Swift method which returns array返回数组的Swift方法
【发布时间】:2017-01-13 22:59:43
【问题描述】:

所以,我有一个关于类和结构接口在 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]() }

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

【问题讨论】:

  • 您有具体的用例或有关此方法的更多详细信息吗?还是这纯粹是假设?
  • @RyanPoolos 我在为我的一个应用程序构建架构时遇到了这个问题,但我想我想要最常见的答案,所以是的,这纯粹是假设。

标签: ios swift


【解决方案1】:

这只是我的意见,我没有任何指导方针或任何东西可以支持它,但是......

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

func getAllObjectsFromSomewhere() -> [Int]?

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

func getAllObjectsFromSomewhere() -> [Int]?

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

通常情况下,您希望在数组中返回一些 Ints。

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

通常,一个空数组应该不足以成为实际开始引发异常的理由,但这当然取决于具体情况。

func getAllObjectsFromSomewhere() 抛出 -> [Int]

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

func getAllObjectsFromSomewhere() -> [Int]

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

当您调用getAllObjectsFromSomewhere 时,您仍然需要检查返回的数组是否实际包含任何内容(if getAllObjectsFromSomewhere().count > 0),然后再决定要做什么......为什么不使用guard 或@987654330 @那个?

如前所述,这只是我对三个场景的想法,希望你可以使用。

【讨论】:

    【解决方案2】:

    这三种方法都有效,视情况而定:

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

    【讨论】:

    • 这就是我的想法,但是,我不太确定应用程序。例如,我正在尝试从某个抽象数据库中获取对象列表。我应该使用哪一个?这是否取决于我想要获得的架构级别?
    • 因为,例如,如果它是低级模型,我想处理抛出,如果它是接近视图的东西,比如 viewModel,我什至不想处理 nil 值。
    • 再举个例子,如果我对数据库执行请求,结果为0,我应该返回空数组吗?还是零?
    • @PavelGatilov 当数据库请求成功返回零行时,这意味着没有行,但它们可能存在。因此,您应该返回一个空数组。返回nil 或抛出异常应该是仅当请求出现错误时的选项。如果请求本身由于编程错误而无效,则应始终抛出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2013-02-12
    • 2013-12-15
    相关资源
    最近更新 更多