如果你定义了 wrappedValue 的 getter 和 setter 或属性观察器(didSet、willSet)

35 阅读1分钟
@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

必须显式写出初始化方法。