@propertyWrapper与@propertyDelegate的区别及相关命名疑问
@propertyWrapper 和 @propertyDelegate 的区别
这是个特别敏锐的发现!其实你完全没忽略什么——这两个修饰符本质上是同一个Swift特性,只是苹果在开发迭代过程中换了个官方名称而已。
背后的命名迭代历程
- WWDC19上苹果首次公开这个特性时,用的名字是
@propertyWrapper,当时的演讲和文档都统一用这个称呼。 - 但在Xcode 11 Beta的早期版本里,苹果的内部实现(包括SwiftUI的
@State等属性)用的却是@propertyDelegate,这是因为团队在正式发布前还在调整命名细节。
编译器的“滞后”提示
你看到编译器报错时统一显示“Property delegate”,也是Beta版本的过渡现象——当时编译器的错误提示还没完全同步到新的@propertyWrapper命名,所以不管你写哪个修饰符,都会触发旧的提示文本。
最终的官方标准
随着Xcode 11的正式发布,苹果确定了@propertyWrapper作为这个特性的官方名称,后续的Swift版本、官方文档以及SwiftUI的公开源码都统一使用这个命名,@propertyDelegate也就退出了正式的语法规范。
举个简单的验证例子,不管你写:
@propertyDelegate struct A { }
还是:
@propertyWrapper struct A { }
编译器都会抛出相同的错误,因为在Beta版本里这两个修饰符指向的是同一个底层特性,只是名称不同罢了。
内容的提问来源于stack exchange,提问作者Rico Crescenzio
相关产品推荐
相关产品推荐

