禁止在Swift中设置特定值

时间:2018-10-31 19:01:07

标签: swift swift4

我想“禁止”将var等值设置为0(浮点型或int型),以确保它可以作为适当的除数。在Swift中实现此目标的正确方法是什么?我可以想到的一种方法是将fatalError()放入didSet方法中,但我想Swift可能有更好的方法来处理它。

2 个答案:

答案 0 :(得分:2)

您有几种选择,但是我认为这取决于您的偏好以及变量的使用方式。

如果将

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
}

答案 1 :(得分:1)

我建议为此查看precondition和/或assert

根据设置为0时问题的严重性,可以选择其中一个。