Swift 获取与 _read

Swift get vs _read

下面2个下标有什么区别?

subscript(position: Int) {
    get { ... }
}
subscript(position: Int) {
    _read { ... }
}

_read 是已经开发了一段时间的 Swift 所有权故事的一部分。由于 read(经过 Swift 演化后的可能名称)是该语言的相当先进的概念,您可能希望至少阅读所有权宣言 here 中对其进行描述的地方得到比我在这里提供的更完整的答案。

它是下标 get 的替代方法,允许您 yield 一个值而不是 return 一个值。这对于仅移动类型是必不可少的,因为它们不能被复制(这是它们的全部目的),当您 return 一个值时会发生这种情况。通过使用 read 它可以做到这一点,例如,您可以拥有一个仅移动类型的 Array 并且仍然使用其中的值而不通过移动它们来获取它们的所有权。从概念上考虑它的最简单(并且在技术上不正确,因为它是协程)的方法是您获得指向 read yields.

的对象的指针

read 的兄弟姐妹是 modify,目前处于 Swift 进化 here 的投球阶段,这样也可以让您对 here 有一些有用的见解=11=] 因为它也是一个协程。

所以现在,如果 Xcode 给你一个 _read 来实现,只需将它更改为 get 因为它是一个错误,因为它还不是该语言的官方部分.