Разница между @propertyDelegate и @propertyWrapper - PullRequest
2 голосов
/ 09 июня 2019

Какая разница между @propertyWrapper и @propertyDelegate? Во всех видеороликах WWDC19 говорится о @propertyWrapper, однако во всех реальных реализациях используется @propertyDelegate (т.е. SwiftUI - State ); Компилятор на Xcode 11 Beta, кажется, принимает оба и запрашивает одно и то же требование:

@propertyDelegate struct A {

}
// Property delegate type 'A' does not contain a non-static property named 'value'
@propertyWrapper struct A {

}
// Property delegate type 'A' does not contain a non-static property named 'value'

Обратите внимание, что в обоих случаях компилятор говорит «Свойство делегат» .

Я что-то упустил или это потому, что они еще не решили, какое имя использовать?

Ответы [ 2 ]

4 голосов
/ 09 июня 2019

TLDR; они одинаковые, но вы должны использовать @propertyWrapper.

Как указал @JosefDolezal в твиттере https://twitter.com/josefdolezal/status/1137619597002248192?s=21, имя @propertyDelegate было возвращено для пересмотра основной командой https://forums.swift.org/t/returned-for-revision-se-0258-property-delegates/24080. Основная команда предложила несколько альтернативных имен, но поскольку это предложение не было завершено до WWDC они выбрали одного из них, чтобы представить эту функцию миру.

Так что весьма вероятно, что @propertyDelegate будет удален, и вероятно, что @propertyWrapper останется, хотя это все еще может измениться в ходе продолжающегося процесса эволюции.

1 голос
/ 15 июня 2019

Во второй версии @propertyWrapper Swift Evolution есть раздел с описанием изменений по сравнению с первой проверенной версией . В верхней части этого списка, у нас есть это:

Название функции было изменено с "делегаты свойства" на «Обертки свойств» , чтобы лучше понять, как они работают, и избежать Существующее использование термина «делегат» в сообществе разработчиков Apple.

@propertyDelegate только что был переименован в @propertyWrapper. Имя @propertyDelegate скоро исчезнет, ​​хотя оно все еще присутствует в документации SwiftUI по состоянию на 15.06.199.

...