Разница между @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.