SwiftUI是否可以将绑定获取集自定义绑定与@Binding属性包装一起使用?
如何在SwiftUI视图上使用带有SwiftUI是否可以将绑定获取集自定义绑定与@Binding属性包装一起使用?,binding,swiftui,property-wrapper,Binding,Swiftui,Property Wrapper,如何在SwiftUI视图上使用带有@Binding属性的绑定(get:{},set:{})自定义绑定。我已成功地将此自定义绑定与@State变量一起使用,但不知道如何将其应用于子视图初始值设定项中的@binding。我需要它观察父类分配给@Binding属性的更改,以便执行带有一些副作用的代码 这里是可能的方法。演示显示了主视图和从属视图之间通过适配器绑定的双向通道。由于更新时有许多可能的回调,所以可能需要引入冗余过滤,但这取决于真正需要的内容和超出范围的内容 演示代码: struct Test
@Binding
属性的绑定(get:{},set:{})
自定义绑定。我已成功地将此自定义绑定与@State
变量一起使用,但不知道如何将其应用于子视图初始值设定项中的@binding
。我需要它观察父类分配给@Binding
属性的更改,以便执行带有一些副作用的代码 这里是可能的方法。演示显示了主视图和从属视图之间通过适配器绑定的双向通道。由于更新时有许多可能的回调,所以可能需要引入冗余过滤,但这取决于真正需要的内容和超出范围的内容
演示代码:
struct TestBindingIntercept: View {
@State var text = "Demo"
var body: some View {
VStack {
Text("Current: \(text)")
TextField("", text: $text)
.textFieldStyle(RoundedBorderTextFieldStyle())
Divider()
DependentView(value: $text)
}
}
}
struct DependentView: View {
@Binding var value: String
private var adapterValue: Binding<String> {
Binding<String>(get: {
self.willUpdate()
return self.value
}, set: {
self.value = $0
self.didModify()
})
}
var body: some View {
VStack {
Text("In Next: \(adapterValue.wrappedValue)")
TextField("", text: adapterValue)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
private func willUpdate() {
print(">> run before UI update")
}
private func didModify() {
print(">> run after local modify")
}
}
struct TestBindingIntercept_Previews: PreviewProvider {
static var previews: some View {
TestBindingIntercept()
}
}
struct TestBindingIntercept:视图{
@State var text=“演示”
var body:一些观点{
VStack{
文本(“当前:\(文本)”)
TextField(“,text:$text)
.textFieldStyle(RoundedBorderTextFieldStyle())
分隔器()
DependentView(值:$text)
}
}
}
结构依赖视图:视图{
@绑定变量值:字符串
私有变量adapterValue:绑定{
绑定(获取:{
self.willUpdate()
回归自我价值
},集:{
self.value=$0
self.diddommodify()
})
}
var body:一些观点{
VStack{
文本(“在下一个:\(adapterValue.wrappedValue)”中)
文本字段(“,文本:adapterValue)
.textFieldStyle(RoundedBorderTextFieldStyle())
}
}
私有func willUpdate(){
打印(“>>在UI更新之前运行”)
}
私有函数diddommodify(){
打印(“>>本地修改后运行”)
}
}
结构TestBindingIntercept\u预览:PreviewProvider{
静态var预览:一些视图{
TestBindingIntercept()
}
}
您能添加一些代码来显示您的尝试吗?现在还不清楚你想要完成什么。