@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'
请注意,在两种情况下,编译器均会显示“属性委托” 。
我错过了什么吗?或者是因为他们尚未决定使用哪个名称?
答案 0 :(得分:4)
TLDR;它们是相同的,但是您应该使用@propertyWrapper
。
正如@JosefDolezal在Twitter 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 :(得分:1)
在@propertyWrapper
Swift Evolution proposal的第二版中,有一节概述了与第一版相比的更改。在此列表的顶部,我们有它:
功能的名称已从“属性代表”更改为 “属性包装程序” ,以更好地交流它们的工作方式,并避免 苹果开发者社区中“委托”一词的现有用法。
@propertyDelegate
刚刚重命名为@propertyWrapper
。 @propertyDelegate
这个名称很快就会消失,尽管SwiftUI
文档中的名称从19/06/15开始仍然存在。