面试题答案
一键面试Swift属性包装器基本原理
属性包装器是一种将属性的存储和逻辑封装到独立类型中的特性。其核心原理在于:
- 分离关注点:把属性的存储逻辑(如初始化、读取、写入)和属性本身的业务逻辑(如验证、计算等)分开。这样使得代码结构更清晰,可维护性更强。
- 复用性:一个属性包装器可以应用到多个不同的属性上,减少重复代码。例如,对于多个需要验证的属性,可以复用同一个验证逻辑的属性包装器。
创建简单属性包装器实现属性存储和验证示例
// 定义属性包装器
@propertyWrapper
struct UserNameValidator {
private var name: String = ""
var wrappedValue: String {
get { name }
set {
if newValue.count >= 3 {
name = newValue
} else {
print("用户名长度至少为3位")
}
}
}
}
// 使用属性包装器
struct User {
@UserNameValidator var name: String
}
// 测试
var user = User()
user.name = "John"
print(user.name)
user.name = "Jo"
在上述代码中:
- 我们定义了一个名为
UserNameValidator
的属性包装器,它内部有一个私有的存储属性name
来实际存储值。 wrappedValue
是属性包装器提供的访问接口,通过它来读写实际存储的值。在设置wrappedValue
时,进行了用户名长度的验证,如果长度小于3则不更新值并打印提示信息。- 在
User
结构体中,使用@UserNameValidator
来修饰name
属性,表明这个属性使用UserNameValidator
进行包装,从而实现对name
属性的存储和验证逻辑。