Может использоваться любой тип , соответствующий протоколу 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