@propertyDelegate和@propertyWrapper之间的区别

4

在编程中,@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个回答

7
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 将保留,尽管这在持续的演进过程中仍然可能发生变化。

2
在第二版的@propertyWrapper Swift进化提案中,有一节概述了与第一个版本的变化。在这个列表的顶部,我们可以看到:

该功能的名称已从“property delegates”更改为“property wrappers”,以更好地传达其工作原理并避免苹果开发者社区中现有的“delegate”术语的使用。

@propertyDelegate刚刚更名为@propertyWrapper。尽管截至2019年6月15日,名称@propertyDelegate仍然存在于SwiftUI文档中,但它很快将消失。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接