SwiftUI是否可以将绑定获取集自定义绑定与@Binding属性包装一起使用?

SwiftUI是否可以将绑定获取集自定义绑定与@Binding属性包装一起使用?,binding,swiftui,property-wrapper,Binding,Swiftui,Property Wrapper,如何在SwiftUI视图上使用带有@Binding属性的绑定(get:{},set:{})自定义绑定。我已成功地将此自定义绑定与@State变量一起使用,但不知道如何将其应用于子视图初始值设定项中的@binding。我需要它观察父类分配给@Binding属性的更改,以便执行带有一些副作用的代码 这里是可能的方法。演示显示了主视图和从属视图之间通过适配器绑定的双向通道。由于更新时有许多可能的回调,所以可能需要引入冗余过滤,但这取决于真正需要的内容和超出范围的内容 演示代码: struct Test

如何在SwiftUI视图上使用带有
@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()
}
}

您能添加一些代码来显示您的尝试吗?现在还不清楚你想要完成什么。