如何在 SwiftUI 观察到的变量更改其值后立即触发操作
How to trigger an action as soon as a SwiftUI observed variable changes its value
我的视图中有一个列表,其中的元素将在列表参数更改后立即更新。这是我的看法:
struct ContentView: View {
@ObservedObject var users = Utenti()
@State private var isSharePresented: Bool = false
var body: some View {
VStack(spacing: 20) {
HStack(alignment: .center) {
Spacer()
Text("Internal Testers")
.font(.title)
.foregroundColor(.primary)
Spacer()
Button(action: {
self.isSharePresented.toggle()
}) {
Image(systemName: "square.and.arrow.up").font(.title).padding(.trailing)
}.sheet(isPresented: self.$isSharePresented, onDismiss: {
print("Dismissed")
}, content: {
ActivityViewController(activityItems: self.users.listaUtenti)
})
}
List(self.users.listaUtenti, id: \.self) { user in
Text(user)
}
}
}
}
变量users是一个@ObservedObject,所以列表内容会在模型中发生变化时自动更新。
我的问题是:如何捕获与 users 变量有关的 'update' 事件?以及如何在捕获后触发一个动作(例如调用一个函数)?
class Utenti : ObservableObject {
@Published var listaUtenti = ["anna", "smith", "david"] {
didSet {
// your func here
}
}
}
以上代码,只要 lista Utenti 元素发生变化,您的函数就会执行。
假设 listaUtenti
是 @Published
属性 你可以如下抓取它的发布者
List(self.users.listaUtenti, id: \.self) { user in
Text(user)
}
.onReceive(self.users.$listaUtenti) { newValue in
// do this what's needed
}
我的视图中有一个列表,其中的元素将在列表参数更改后立即更新。这是我的看法:
struct ContentView: View {
@ObservedObject var users = Utenti()
@State private var isSharePresented: Bool = false
var body: some View {
VStack(spacing: 20) {
HStack(alignment: .center) {
Spacer()
Text("Internal Testers")
.font(.title)
.foregroundColor(.primary)
Spacer()
Button(action: {
self.isSharePresented.toggle()
}) {
Image(systemName: "square.and.arrow.up").font(.title).padding(.trailing)
}.sheet(isPresented: self.$isSharePresented, onDismiss: {
print("Dismissed")
}, content: {
ActivityViewController(activityItems: self.users.listaUtenti)
})
}
List(self.users.listaUtenti, id: \.self) { user in
Text(user)
}
}
}
}
变量users是一个@ObservedObject,所以列表内容会在模型中发生变化时自动更新。
我的问题是:如何捕获与 users 变量有关的 'update' 事件?以及如何在捕获后触发一个动作(例如调用一个函数)?
class Utenti : ObservableObject {
@Published var listaUtenti = ["anna", "smith", "david"] {
didSet {
// your func here
}
}
}
以上代码,只要 lista Utenti 元素发生变化,您的函数就会执行。
假设 listaUtenti
是 @Published
属性 你可以如下抓取它的发布者
List(self.users.listaUtenti, id: \.self) { user in
Text(user)
}
.onReceive(self.users.$listaUtenti) { newValue in
// do this what's needed
}