class SomeClass {
var someProperty: Int {
throw Err("SNAFU")
}
}
对于上面这样的代码,swift二进制抱怨'错误未被处理,因为未声明封闭函数'抛出'。
我如何声明' someProperty' '抛出'在上面?
class SomeClass {
var someProperty throws: Int {
}
}
和
class SomeClass {
var someProperty: throws Int {
}
}
和
class SomeClass {
var someProperty: Int throws {
}
}
似乎没有工作。
答案 0 :(得分:42)
Swift 5的更新:这仍然不可能。
截至Swift 3:
你不能从计算属性中抛出。如果你想扔,你必须使用一个功能。 Declarations section of the Language Reference末尾的The Swift Programming Language部分仅列出throws
(和rethrows
)作为函数和初始化程序声明的关键字。
答案 1 :(得分:39)
虽然从Swift中的计算属性 我们同意你应该能够在下标和计算属性中将getter和setter标记为“throws”,但还没有到达那里。我们可能会在某个时候支持这一点,但目前尚不清楚它是否会及时赶到Swift 2。throw
,但我发现Chris Lattner自己在one of Apple Developer Forums threads上对此问题进行了解答:< / p>
答案 2 :(得分:1)
让我建议一种解决方法:可以将属性声明为Result<DesiredPropertyType, Error>
类型。这样就可以像这样访问它:
do {
try self.failableProperty.get()
} catch {
...
}
get()
是Swift的Result
的{{3}}方法。