【问题标题】:What is the best way to propagate Argument Validation Error in Swift?在 Swift 中传播参数验证错误的最佳方法是什么?
【发布时间】:2016-07-27 18:52:52
【问题描述】:

是否有一种标准方法可以从函数中传播给定参数在 Swift 中无效的错误?

我知道我可以自己定义 ErrorType。但如果有标准的方法,我想避免重复工作。

另一个选项是使返回类型可以为空。 (我个人更喜欢抛出错误,因为使用 try? 我们可以获得相同的效果。)

在 Swift 中什么方式被认为是“标准”或“好”?

【问题讨论】:

  • 好吧,一方面,您可以throw 任何 NSError,这比定义您自己的 ErrorType 更“标准”。
  • 我明白了。我以为 NSError 中没有标准代码,但现在我发现可可域中定义了一些codes。带有可可域的 NSError 和 NSValidationErrorMinimum 代码将是一个不错的选择。

标签: swift error-handling api-design


【解决方案1】:

我用同样的方法告诉使用我的代码的开发人员出了点问题。准确,因为它会停止应用程序。

class AbstractMethodException: NSException {
    init() {
        super.init(
            name: "Called an abstract method",
            reason: "All abstract methods must be overriden by subclasses",
            userInfo: nil)
    }
    //required by Xcode compiler. strange thing
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
}

还有一个例子说明如何为抽象函数提出扩展。

func update(withData data: PVModel) {
        AbstractMethodException().raise()
}

如果只需要抛出错误,我建议使用 ErrorType 协议。

【讨论】:

  • 谢谢。我修改了标题,因为它令人困惑。从你的帖子中我发现我可以在 Swift 中使用 NSException.raise 和 NSInvalidArgumentException 。正如您所提到的,它们不会转换为 ErrorType 并且只会导致 SIGABRT 。在我的情况下,ErrorType 似乎更好,因为有一个选项可以让应用程序崩溃或通过捕获/可选替换来处理它。
  • @Satoshi 是的。这就是抽象函数应该如何工作的。只会导致 SIGABRT。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多