【发布时间】:2021-06-23 15:41:56
【问题描述】:
我在传播视图模型中保存在数组中的对象上发生的更改时遇到问题。
我知道如果集合本身发生变化,集合的@Published 将起作用(例如,如果元素是struct 而不是class)。假设我需要将类保留为类。有没有办法将事件传播到视图,以便它知道应该刷新它。
我一直在尝试所有令人讨厌的方法,例如实现 ObservableCollection 或 ObservableArray,但似乎没有任何效果。
下面是我正在努力解决的一个例子。
Toggle 正在更改具有所有 ObservableObject 一致性和 @Published 注释但仍没有刷新 Text 的数组的内部元素。
import SwiftUI
import Combine
struct ContentView: View {
@StateObject var vm = ViewModel()
var body: some View {
Text(vm.texts.first!.text)
.padding()
Button("Toggle") {
vm.texts.first?.toggle()
}
}
}
class ViewModel: ObservableObject {
@Published var texts: [TextHolder] = [.init(), .init()]
}
class TextHolder: ObservableObject {
@Published var text: String = ""
func toggle() {
text = UUID().uuidString
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
【问题讨论】:
-
三个答案中的任何一个是否回答了您的问题或提供了任何帮助?我注意到他们都没有任何赞成票或 cmets。