如何声明计算属性'抛出'在斯威夫特?

时间:2015-10-02 01:46:28

标签: swift exception swift2

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 {
  }
}
似乎没有工作。

3 个答案:

答案 0 :(得分:42)

Swift 5的更新:这仍然不可能。

截至Swift 3:

你不能从计算属性中抛出。如果你想扔,你必须使用一个功能。 Declarations section of the Language Reference末尾的The Swift Programming Language部分仅列出throws(和rethrows)作为函数和初始化程序声明的关键字。

答案 1 :(得分:39)

虽然从Swift中的计算属性 throw,但我发现Chris Lattner自己在one of Apple Developer Forums threads上对此问题进行了解答:< / p>

  

我们同意你应该能够在下标和计算属性中将getter和setter标记为“throws”,但还没有到达那里。我们可能会在某个时候支持这一点,但目前尚不清楚它是否会及时赶到Swift 2。

答案 2 :(得分:1)

让我建议一种解决方法:可以将属性声明为Result<DesiredPropertyType, Error>类型。这样就可以像这样访问它:

do {
    try self.failableProperty.get()
} catch {
    ...
}

get()是Swift的Result的{​​{3}}方法。