我试图用一个简单的可观察模式来更新视图,但由于某种原因,它不会发生。发布服务器得到更新,但订阅服务器没有更新。我已经简化为下面的代码。单击Add按钮时,视图和变量都不会更新。
我使用这个函数(NetworkManager.shared.saveNew()),因为我在CloudKit通知之后进行更新。如果你知道解决办法,我会很高兴知道的!
import SwiftUI
import Combine
public class NetworkManager: ObservableObject {
static let shared = NetworkManager()
@Published var list = [DataSource]()
init() {
self.list = [DataSource(id: "Hello", action: [1], link: "http://hello.com", year: 2020)]
}
func saveNew(item: DataSource) {
self.list.append(item)
}
}
struct DataSource: Identifiable, Codable {
var id: String
var action: [Int]
var link: String
var year: Int
init(id: String, action: [Int], link: String, year: Int) {
self.id = id
self.action = action
self.link = link
self.year = year
}
}
struct ContentView: View {
@ObservedObject var list = NetworkManager()
var body: some View {
VStack {
Button("Add") {
NetworkManager.shared.saveNew(item: DataSource(id: "GoodBye", action: [1], link: "http://goodbye", year: 2030))
}
List(list.list, id:\.id) { item in
Text(item.id)
}
}
}
}发布于 2020-05-15 10:21:38
应该使用相同的NetworkManager实例,因此这里是固定的变体(最好将管理器命名为manager,而不是list)。
struct ContentView: View {
@ObservedObject var manager = NetworkManager.shared // << fix !!
var body: some View {
VStack {
Button("Add") {
self.manager.saveNew(item: DataSource(id: "GoodBye", action: [1], link: "http://goodbye", year: 2030))
}
List(manager.list, id:\.id) { item in
Text(item.id)
}
}
}
}https://stackoverflow.com/questions/61816898
复制相似问题