以下2个下标有什么区别?
subscript(position: Int) {
get { ... }
}
subscript(position: Int) {
_read { ... }
}
最佳答案
_read
是 Swift Ownership 故事的一部分,该故事已经开发了一段时间。由于 read
(经过 Swift Evolution 后的可能名称)是该语言的相当高级的概念,因此您可能至少需要阅读 Ownership Manifesto here 中描述的内容,以获得比我在这里提供的更完整的答案。
它是下标上 get
的替代方法,允许您对值进行 yield
而不是 return
值。这对于仅移动类型是必不可少的,因为它们不能被复制(这是它们的全部目的),当您 return
一个值时会发生这种情况。通过使用 read
它可以让你拥有例如只移动类型的 Array
并且仍然使用其中的值,而无需通过移动它们来获取它们的所有权。从概念上考虑它的最简单(并且技术上不正确,因为它是一个协程)方法是您获得一个指向 read
yields
对象的指针。read
的兄弟是 modify
,它目前处于 Swift Evolution here 的音调阶段,因此它也可以让您了解 read
是什么,因为它也是一个协程。
所以现在如果 Xcode 给你一个 _read
来实现,只需将它更改为 get
因为它是一个错误,因为它不是语言的官方部分。
关于Swift get vs _read,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60105624/