如何在Swift中声明计算属性'throws'?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Swift中声明计算属性'throws'?相关的知识,希望对你有一定的参考价值。

class SomeClass {
  var someProperty: Int {
    throw Err("SNAFU")
  }
}

对于上面这样的代码,swift二进制抱怨'错误未被处理,因为封闭函数未被声明为'throws'。

如何在上面声明'someProperty''抛出'?

class SomeClass {
  var someProperty throws: Int {
  }
}

class SomeClass {
  var someProperty: throws Int {
  }
}

class SomeClass {
  var someProperty: Int throws {
  }
}

似乎没有工作。

答案

截至Swift 3:

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

另一答案

虽然从Swift的计算属性中找不到throw是不可能的,但我发现Chris Lattner自己在one of Apple Developer Forums threads上解决了同样的问题:

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

以上是关于如何在Swift中声明计算属性'throws'?的主要内容,如果未能解决你的问题,请参考以下文章

swift 报错 Call can throw, but it is not marked with 'try' and the error is not handled

如何使用 swift 在 UIResponder 子类中将属性重新声明为读写?

如何在可编码结构中使用计算属性(swift)

Swift 5.1 (10) - 属性

java异常处理 throw RuntimeException时不需要同时方法中声明抛出throws 异常等待调用者catch进行捕获 子父类异常问题

Swift 中的 throws 和 rethrows 有啥区别?