Какие типы могут быть использованы в качестве ошибок в Swift? - PullRequest
0 голосов
/ 03 октября 2018

Я знаю, что Enum используется, как показано ниже, а как насчет Array или Dictionary?

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

throw VendingMachineError.insufficientFunds(coinsNeeded: 5)

1 Ответ

0 голосов
/ 03 октября 2018

Может использоваться любой тип , соответствующий протоколу Error.Если вы действительно хотите выбросить массив, тогда достаточно объявить о соответствии протоколу:

extension Array: Error {}

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

Вот более реалистичный пример использования struct для выдачи ошибки с дополнительной информацией (упрощенный пример из Swift 3 ошибки с дополнительными данными ):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...