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

在Swift中的观察者方法中抛出错误,第1张

概述我正在尝试在属性观察者方法(didSet和willSet)中实现一些验证规则,我试图在闭包内使用throw.这是一个说明性的例子: enum SomeClassError: ErrorType { case NumberNotPositive}class SomeClass { var PositiveNumber: Int { willSet(value) { 我正在尝试在属性观察者方法(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 = 2a.positiveNumber = -1   // Error: Number not positiveprint(a.positiveNumber) // -1

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

总结

以上是内存溢出为你收集整理的在Swift中的观察者方法中抛出错误全部内容,希望文章能够帮你解决在Swift中的观察者方法中抛出错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1002463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存