【问题标题】:What are all types may be used as errors in Swift?哪些类型可以用作 Swift 中的错误?
【发布时间】:2019-03-08 09:57:31
【问题描述】:

我知道Enum的用法如下,那么Array或Dictionary呢?

enum VendingMachineError: Error {
  case invalidSelection
  case insufficientFunds(coinsNeeded: Int)
  case outOfStock
  }

throw VendingMachineError.insufficientFunds(coinsNeeded: 5)

【问题讨论】:

  • 你能澄清一下这个问题吗? “数组或字典呢”它们呢?!这是什么意思?
  • 我在问,我们可以用字符串或数组快速处理错误吗?
  • 这是我的面试问题,我想把这个分享给大家,以便知道确切的答案。我说不,唯一的方法是枚举,但我不确定。
  • 试着举个例子(可能是伪代码),让我们知道你想要/想要实现什么。

标签: swift error-handling


【解决方案1】:

任何符合Error 协议的 类型都可以使用。如果你真的想要 抛出一个数组然后声明符合协议就足够了:

extension Array: Error {}

do {
    throw [1, 2, 3]
} catch {
    print("Failed:", error) // Failed: [1, 2, 3]
}

这是一个更现实的例子,使用struct 来抛出 带有附加信息的错误(来自 Swift 3 errors with additional data):

struct ParserError: Error, LocalizedError {
    let line: Int

    public var errorDescription: String? {
        return "Parser error at line \(line)"
    }
}

func parse() throws {
    throw ParserError(line: 13)
}

do {
    try parse()
} catch let error {
    print(error.localizedDescription)
}

输出:

Parser error at line 13

【讨论】:

  • 这样做有什么目的吗?所以,error 会是一个数组而不是 - 比如说 - 枚举,对吗?
  • @AhmadF:使用数组更多是理论上的例子,我看不到它的实际用法。我添加了一个指向更现实的非枚举示例的链接。
猜你喜欢
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
相关资源
最近更新 更多