Запретить установку определенного значения в Swift - PullRequest
0 голосов
/ 31 октября 2018

Я хочу «запретить» установку значения, такого как 0, в переменную (float или int), чтобы убедиться, что она может быть правильным делителем. Как правильно добиться этого в Swift? Один из способов, который я могу придумать, - это поместить fatalError () в метод didSet, но, думаю, у Swift могут быть более эффективные способы решения этой проблемы.

Ответы [ 2 ]

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

Я бы посоветовал посмотреть на precondition и / или assert для этого.

В зависимости от серьезности проблемы при настройке 0, вы можете выбрать один или другой.

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

У вас есть несколько вариантов, но я думаю, что все сводится к вашим предпочтениям и способам использования вашей переменной.

fatalError() будет уместно, если его установка на 0 будет ошибкой программиста, это должно быть обнаружено при тестировании вашего приложения. Лично я бы этого избежал.

Вы также можете использовать didSet, чтобы изменить значение на ненулевое значение, например 1.

Другой вариант - использовать функцию для установки значения и заставить эту функцию выдавать ошибку при передаче 0, чтобы код, который устанавливает значение, мог реагировать на это и предупреждать пользователя.

Вот как будет реализован последний вариант, который я бы сделал:

enum InputError: Error {
  case divisorCantBeZero
}

private var _divisor: CGFloat = 1
var divisor: CGFloat {
  return _divisor
}

func setDivisor(_ newValue: CGFloat) throws {
  guard newValue != 0 else {
    throw InputError.divisorCantBeZero
  }
  _divisor = newValue
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...