Swift get vs _read

标签 swift readonly access-control subscript

以下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/

相关文章:

arrays - 苹果在使用 URLSession.shared.dataTask 后更改了我的 JSON 格式

ios - 在 Swift 中使用 NSURLSession 下载文件

Spring Security 自定义 PermissionEvaluator 配置无法正常工作

ios - 如何同时获取indexPath.row和indexPath.section

ios - 2 个或更多具有相同类崩溃的 UIViewcontroller

ruby-on-rails - Rails 在编辑时重用表单 View ,但将某些字段设置为只读

jquery - 切换输入字段中的只读属性

const 指针固定到可变变量

google-chrome - Font Awesome 图标未在 Chrome 中显示,这是与 MaxCDN 相关的跨源资源共享政策问题

git - 阻止在 GitHub 上推送到 master ?