Разница между @propertyDelegate и @propertyWrapper

Какая разница между @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 ответа

Решение

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 останется, хотя это все еще может измениться в ходе продолжающегося процесса эволюции.

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

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

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

Другие вопросы по тегам