gpt4 book ai didi

binding - SwiftUI 我可以使用 Binding get set 自定义绑定(bind)和 @Binding 属性包装器吗?

转载 作者:行者123 更新时间:2023-12-02 12:29:45 42 4
gpt4 key购买 nike

如何在 SwiftUI View 上使用 Binding(get: { }, set: { }) 自定义绑定(bind)与 @Binding 属性。我已成功使用此自定义绑定(bind)与 @State 变量,但不知道如何将其应用于 subview 初始值设定项中的 @Binding 。我需要它来观察父类分配给 @Binding 属性的更改,以便执行具有一些副作用的代码!

最佳答案

这是可能的方法。该演示展示了主视图和从属 View 之间通过适配器绑定(bind)的双向 channel 。由于更新时有许多可能的回调,因此可能需要引入冗余过滤,但这取决于真正需要的内容以及超出范围的内容。

演示代码:

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")
}
}

关于binding - SwiftUI 我可以使用 Binding get set 自定义绑定(bind)和 @Binding 属性包装器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59311887/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com