Swift面试题更新 2026-08-05

请解释 Swift 中 Property Wrapper 的概念,并说明如何实现一个自定义的属性包装器?

编码实现技术原理Swift

考察说明

考查对 Swift 属性包装器机制的理解及自定义实现能力。

回答思路

  1. 【回答框架 1】属性包装器是一种在属性定义处添加逻辑的类型,通过 @propertyWrapper 声明,包装器类型需实现 wrappedValue 属性,用于存储和提供实际值。
  2. 【回答框架 2】自定义时,定义结构体或类,标注 @propertyWrapper,实现 wrappedValue 的 get 和 set,可在其中添加校验、转换或副作用逻辑。
  3. 【回答框架 3】可添加 projectedValue 属性,通过 $ 前缀访问,用于暴露额外接口,如绑定或状态管理。
  4. 【回答框架 4】使用示例:@Wrapper var value: T,编译器自动将属性访问转发到包装器的 wrappedValue。
  5. 【回答框架 5】常见应用包括 UserDefaults 存储、线程安全、延迟加载等,需注意包装器类型本身是值类型时,修改会触发 set 逻辑。
  6. 【关键点 1】属性包装器通过 @propertyWrapper 声明,核心是 wrappedValue 属性。
  7. 【关键点 2】自定义时需实现 wrappedValue 的 getter 和 setter,可添加逻辑。
  8. 【关键点 3】projectedValue 提供额外访问,通过 $ 前缀使用。
  9. 【关键点 4】包装器可应用于存储属性,不能用于计算属性或全局变量。
  10. 【易错点 1】包装器类型为值类型时,每次修改都会触发 set,可能影响性能。
  11. 【易错点 2】不能直接访问包装器类型本身,需通过 projectedValue 或显式初始化。
  12. 【易错点 3】避免在 wrappedValue 的 set 中递归调用自身,导致死循环。