Mic*_*bro 4 binding swiftui property-wrapper
如何在 SwiftUI 视图上使用Binding(get: { }, set: { })带有@Binding属性的自定义绑定。我已经成功地将此自定义绑定与@State变量一起使用,但不知道如何将其应用于@Binding子视图初始值设定项。我需要它来观察@Binding父类分配给属性的更改,以便执行带有一些副作用的代码!
Asp*_*eri 15
这是可能的方法。该演示通过主视图和从属视图之间的适配器绑定显示了双向通道。由于许多可能的更新回调,可能需要引入冗余过滤,但这取决于真正需要和超出范围的内容。
演示代码:
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()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3584 次 |
| 最近记录: |