【发布时间】:2015-02-18 15:26:02
【问题描述】:
鉴于 Swift 没有异常处理,当错误传递给属性的值不正确时,我如何将错误传达给调用者。本质上,属性可以进行验证吗?
这是一个例子。考虑下面的 numberOfShoes 属性。计算出来的
class Animal {
var name : String
var numberOfLegs : Int
var numberOfShoes : Int {
get {return numberOfLegs }
set {
if newValue < 0 {
// TODO: WHAT GOES HERE?
}
numberOfLegs = newValue
}
}
init(name : String, numberOfLegs : Int) {
self.name = name
self.numberOfLegs = numberOfLegs
}
}
我们也可以(应该可能)在 numberOfLegs 上有一个 willSet / didSet 观察者,但我也看不到如何在这里完成验证。
我们是否需要坚持以下内容:
var cat = Animal("Cat", 4)
if !cat.setNumberOfLegs(3) {
// I guess that didn't work...
}
其他人都在做什么?
【问题讨论】:
-
为不正确的情况定义一个 default 值,并在您发现无效输入时使用该值设置属性 - 或调用引发异常的
fatalError(...)和您的应用崩溃 - 或使用您在 setter 中接受的预定义值创建enum。 -
谢谢holex。我或多或少地考虑了所有这些。我只是希望两者之间有一些中间立场。 fatalError (而不是某种可以优雅处理的错误),只是默默地不接受该值并使用另一个值(默认)。枚举是一个好主意,但并不总是一个选项(字符串、双精度等)。
标签: swift