@propertyDelegate和@propertyWrapper之间的区别

时间:2019-06-08 23:10:57

标签: swift swift5.1

@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 个答案:

答案 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开始仍然存在。