Я пытаюсь реализовать некоторые правила валидации в методах наблюдения свойств (didSet
и willSet
), и я пытаюсь использовать throw
внутри закрытия. Вот наглядный пример:Ошибки метаданных в методах наблюдателя в Swift
enum SomeClassError: ErrorType {
case NumberNotPositive
}
class SomeClass {
var PositiveNumber: Int {
willSet(value) {
guard value > 0 else {
throw SomeClassError.NumberNotPositive
}
}
}
}
Конечно, компилятор жалуется, что Error is not handled because the enclosing function is not declared 'throws'
, и я действительно не знаю, где заявить, что на самом деле didSet
throws
.
Знаете ли вы, есть ли способ выбросить ошибки в методы наблюдения за собственностью?
укажите, пожалуйста, ваш код –
Я не верю, что есть. Когда свойство получает или задает, вызывающий код не ожидает, что какие-либо ошибки будут выброшены, поэтому наблюдатель должен обрабатывать все ошибки. –
Если вы пытаетесь выполнить проверку с использованием наблюдателя свойств, вы можете либо вернуться к старому значению, либо сбросить свойство до некоторого значения дозорного. –