gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:25 24 4
gpt4 key购买 nike

我正在尝试在属性观察器方法(didSetwillSet)中实现一些验证规则,并且我正在尝试在内部使用 throw关闭。这是一个说明性示例:

enum SomeClassError: ErrorType {
case NumberNotPositive
}

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

当然,编译器会提示 Error 没有被处理,因为封闭函数没有被声明为 'throws' 而我真的不知道在哪里声明 didSet实际上 throws

您知道是否可以在属性观察器方法中抛出错误吗?

最佳答案

您可以在您的属性观察者中调用一个函数do-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 属性观察器时,我使用了默认可访问的 newValue 属性(而不是为将在 willSet 之后设置的值)。另请注意,在您当前的表单中,类属性 positiveNumber 仍被分配 -1 (尽管为此引发了 ErrorType 案例)。

关于swift - 在 Swift 中的观察者方法中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34797704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com