以下两个下标有何区别?
subscript(position: Int) {
get { ... }
}
subscript(position: Int) {
_read { ... }
}
subscript(position: Int) {
get { ... }
}
subscript(position: Int) {
_read { ... }
}
_read
是 Swift 所有权故事的一部分,这个概念已经在开发中了一段时间。由于 read
(经过 Swift Evolution 讨论后可能命名为 read)是该语言中相当高级的概念,您可能至少希望阅读所有权宣言这里中描述它的位置,以获得比我在此提供的更完整的答案。
它是与 get
类似的下标替代方案,允许您 yield
一个值而不是 return
一个值。对于仅限移动类型来说,这至关重要,因为它们不能被复制(这是它们的全部目的),而当你 return
一个值时就会进行复制。通过使用 read
,它使得您可以例如拥有一个仅限移动类型的 Array
并且仍然可以使用其中的值而无需将其所有权转移给其他变量。概念上最简单(虽然不是技术上正确的协程)的方法是,您会获得一个指向 read
所 yield
的对象的指针。
read
的兄弟是 modify
,它目前处于 Swift Evolution 讨论阶段这里,因此它也可以为您提供有关 read
的一些有用的见解,因为它也是协程。
因此,如果 Xcode 让您实现 _read
,那么只需将其更改为 get
,因为这不是语言的正式组成部分,目前还处于研究阶段。