加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Swift中的观察者方法中抛出错误

发布时间:2020-12-14 04:30:55 所属栏目:百科 来源:网络整理
导读:我正在尝试在属性观察者方法(didSet和willSet)中实现一些验证规则,我试图在闭包内使用throw.这是一个说明性的例子: enum SomeClassError: ErrorType { case NumberNotPositive}class SomeClass { var PositiveNumber: Int { willSet(value) { guard value 0
我正在尝试在属性观察者方法(didSet和willSet)中实现一些验证规则,我试图在闭包内使用throw.这是一个说明性的例子:

enum SomeClassError: ErrorType {
  case NumberNotPositive
}

class SomeClass {
  var PositiveNumber: Int {
    willSet(value) {
      guard value > 0 else {
        throw SomeClassError.NumberNotPositive
      }
    }
  }
}

当然,编译器抱怨Error没有被处理,因为封闭函数没有被声明’throws’,我真的不知道在哪里声明didSet实际抛出.

你知道是否有办法在属性观察者方法中抛出错误?

解决方法

您可以在属性observersdo-try-catch`子句中调用一个函数,例如抛出,例如

enum SomeClassError: ErrorType {
    case NumberNotPositive
}

class SomeClass {
    var positiveNumber: Int {
        willSet {
            do {
                try newValueIsPositive(newValue)
            } catch SomeClassError.NumberNotPositive {
                print("Error: Number not positive")
            } catch {
                print("Error: Unknown error")
            }
        }
    }

    init() {
        positiveNumber = 1
    }

    func newValueIsPositive(newValue: Int) throws {
        guard newValue > 0 else {
            throw SomeClassError.NumberNotPositive
        }
    }
}

/* Example */
var a = SomeClass()
a.positiveNumber = 2
a.positiveNumber = -1   // Error: Number not positive
print(a.positiveNumber) // -1

请注意,在使用willSet属性observer时,我使用了默认可访问的newValue属性(而不是显式定义将在willSet之后设置的值的属性名称值).另请注意,在当前表单中,类属性positiveNumber仍会被赋值为-1(尽管会针对此抛出ErrorType大小写).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读