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'

请注意,在这两种情况下,编译器都会说"Property delegate"

我是否遗漏了什么,或者这是因为他们尚未决定使用哪个名称?

4

2 回答 2

7

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会保留下来,尽管在正在进行的进化过程中这仍然可能会发生变化。

于 2019-06-09T09:17:02.847 回答
2

@propertyWrapperSwift Evolution 提案的第二个版本中,有一节概述了与第一个审查版本相比的更改。在这个列表的顶部,我们有它:

该功能的名称已从“property delegates”更改为“property wrappers”,以更好地传达它们的工作方式并避免 Apple 开发人员社区中现有的“delegate”一词的使用。

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

于 2019-06-15T19:35:55.777 回答