Swift получить против _read - PullRequest
1 голос
/ 07 февраля 2020

В чем разница между следующими 2 подписками?

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

1 Ответ

3 голосов
/ 07 февраля 2020

_read является частью истории Swift Ownership, которая находится в разработке уже некоторое время. Так как read (вероятное имя после прохождения Swift Evolution) является довольно продвинутой концепцией языка, вы, вероятно, захотите прочитать хотя бы там, где это описано в Манифесте владения здесь , чтобы получить более полную информацию. ответ, чем я приведу здесь.

Это альтернатива get для подписчиков, которая позволяет вам yield значение вместо return значение. Это важно для перемещения только типов, потому что они не могут быть скопированы (это является их полной целью), что происходит, когда вы return значение. Используя read, вы можете, например, иметь Array типов только для перемещения и по-прежнему использовать значения в нем, не переходя во владение ими, перемещая их. Самый простой (и не технически правильный, поскольку это сопрограмма) способ концептуально подумать о нем заключается в том, что вы получаете указатель на объект, который read yields.

Брат или сестра read есть modify, который в настоящее время находится в фазе основного тона Swift Evolution здесь , что также может дать вам некоторое полезное представление о том, что такое read, так как это также сопрограмма.

Так что для теперь, если Xcode дает вам _read для реализации, просто замените его на get, поскольку это ошибка, поскольку она еще не является официальной частью языка.

...