//view
struct CardBagView: View {
//这里在@CardNumberLog前面包裹一个@State,不然会编译错误
@State @CardNumberLog var cardNumberForLog: String = ""
var body: some View {
// 这里用Bind将上面声明的cardNumberForLog与newText绑定,将@CardNumberLog里面的get、set方法委托给Bind<String>的init里的get、set方法
let newText = Binding<String>(
get: {
self.cardNumberForLog
},
set: {self.cardNumberForLog = $0})
VStack{
Text("当前卡号为:\(newText.wrappedValue)")
TextField("", text: newText)
.textFieldStyle(.roundedBorder)
.frame(width:300.0,height: 100.0)
}
}
}
//propertyWrapper属性包裹器的定义
@propertyWrapper
struct CardNumberLog<Value> {
private var value: Value
init(wrappedValue: Value) {
self.value = wrappedValue
}
var wrappedValue: Value {
get { value }
set {
value = newValue
print("New value is \(newValue)")
}
}
}
效果