观察绑定或状态变量
Observing Binding or State variables
我正在寻找一种观察 @State
或 @Binding
值在 onReceive
中变化的方法。我无法让它工作,我怀疑这是不可能的,但也许有一种方法可以将它们转换为 Publisher
或其他东西,同时保持源更新值像现在一样?
您可以在下面找到我需要这个的一些背景信息:
我有一个 parent 视图,它应该基于这个库显示半模态:https://github.com/AndreaMiotto/PartialSheet
为此,我创建了一个 @State private var modalPresented: Bool = false
并使用它来显示和隐藏此模态视图。这工作正常,但我的 parent 在初始化 self 后立即初始化此模态,所以我完全松开 onAppear
和 onDisappear
修饰符。问题是我需要 onAppear
每次呈现此模态时执行一些数据获取(理想情况下,当模态被关闭时我也会取消网络任务)。
改用 ObservableObject / ObservedObject。
一个例子
import SwiftUI
class Model: ObservableObject {
@Published var txt = ""
@Published var editing = false
}
struct ContentView: View {
@ObservedObject var model = Model()
var body: some View {
TextField("Email", text: self.$model.txt, onEditingChanged: { edit in
self.model.editing = edit
}).onReceive(model.$txt) { (output) in
print("txt:", output)
}.onReceive(model.$editing) { (output) in
print("editing:", output)
}.padding().border(Color.red)
}
}
我正在寻找一种观察 @State
或 @Binding
值在 onReceive
中变化的方法。我无法让它工作,我怀疑这是不可能的,但也许有一种方法可以将它们转换为 Publisher
或其他东西,同时保持源更新值像现在一样?
您可以在下面找到我需要这个的一些背景信息:
我有一个 parent 视图,它应该基于这个库显示半模态:https://github.com/AndreaMiotto/PartialSheet
为此,我创建了一个 @State private var modalPresented: Bool = false
并使用它来显示和隐藏此模态视图。这工作正常,但我的 parent 在初始化 self 后立即初始化此模态,所以我完全松开 onAppear
和 onDisappear
修饰符。问题是我需要 onAppear
每次呈现此模态时执行一些数据获取(理想情况下,当模态被关闭时我也会取消网络任务)。
改用 ObservableObject / ObservedObject。
一个例子
import SwiftUI
class Model: ObservableObject {
@Published var txt = ""
@Published var editing = false
}
struct ContentView: View {
@ObservedObject var model = Model()
var body: some View {
TextField("Email", text: self.$model.txt, onEditingChanged: { edit in
self.model.editing = edit
}).onReceive(model.$txt) { (output) in
print("txt:", output)
}.onReceive(model.$editing) { (output) in
print("editing:", output)
}.padding().border(Color.red)
}
}