@propertyWrapper
struct Validation {
var wrappedValue: String {
didSet {
wrappedValue = wrappedValue.isEmpty ? "值不可为空" : wrappedValue
}
}
// init(wrappedValue: String) {
// self.wrappedValue = wrappedValue.isEmpty ? "值不可为空" : wrappedValue
// }
}
struct User {
@Validation var name: String = ""
}
var user = User()
print(user.name)
在 @propertyWrapper 中:
• 如果你定义了 wrappedValue 的 getter 和 setter 或属性观察器(didSet、willSet),编译器就不会自动合成init(wrappedValue:)。
• 这时候你必须显式写出初始化方法,否则无法从 @Validation var name: String = "" 这样的语法推断出如何初始化。
在属性包装器中,如果我定义了wrappedValue的getter和setter或属性观察器,编译器就不会自动合成init
必须显式写出初始化方法。