我正在寻找一种观察@State
中@Binding
或onReceive
值变化的方法。我无法使其工作,并且我怀疑这是不可能的,但是也许有一种方法可以将它们转换为Publisher
或其他方式,同时保持源代码更新的价值?
在下面您可以找到一些背景,为什么我需要这样做:
我有一个父视图,该视图应基于以下库显示半模态:https://github.com/AndreaMiotto/PartialSheet
为此,我创建了一个@State private var modalPresented: Bool = false
,并使用它来显示和隐藏此模式视图。这很好用,但是我的父母在初始化self之后立即初始化了该模式,因此我完全松开了onAppear
和onDisappear
修饰符。问题在于,每次显示此模态时,我都需要onAppear
来执行一些数据提取(理想情况下,在取消模态时,我也将取消网络任务)。
答案 0 :(得分:1)
改为使用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)
}
}