Я пытаюсь создать простую структуру обработки ошибок в Swift. То, что я хотел бы сделать, это вернуть тип, который включает либо код «Успех», либо код «Ошибка». Но чтобы сделать это немного сложным, в случае ошибки, я также хочу получить сообщение и диагностическую строку.Как вернуть Swift enum для обработки ошибок
Я придумал это, который отлично компилируется и работает просто замечательно, насколько возвращение успеха/ошибки:
enum PasswordValidationResult {
case Success
case PasswordError(message: String, diagnostic: String)
func isValid() -> Bool {
switch self {
case .Success:
return true
case .PasswordError:
return false
}
}
}
И я могу вернуть нужное значение (ы):
return PasswordValidationResult.PasswordError(message: "You can't do that", diagnostic: "XYZ")
Проблема возникает, когда я пытаюсь ссылаться на возвращаемое значение.
Очевидно, я могу использовать функцию isValid(), чтобы проверить условие успеха, но я не могу найти синтаксис для ссылки на сообщение и диагностические строки.
Например, пытаясь это:
myError = someFunction()
if myError == PasswordValidationResult.Error {
// None of this will compile, at all...
println(myError.message)
}
Таким образом, давая те части 'PasswordError' имен кортежей в объявлении не имеет смысла. – nhgrif
@nhgrif не уверен, что вы имеете в виду –
'case PasswordError (сообщение: String, diagnostic: String)' <- из фрагмента кода в вопросе. Именование частей этого кортежа бессмысленно, не так ли? – nhgrif