【问题标题】:@ObservedObject does not get updated@ObservedObject 未更新
【发布时间】:2020-09-01 03:23:08
【问题描述】:

我正在尝试使用简单的 Observable 模式更新视图,但由于某种原因它没有发生。发布者得到更新,但订阅者没有。我已经简化为下面的代码。当您单击“添加”按钮时,视图和变量都不会更新。

我正在使用这个函数 (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)
            }
        }

    }
}

【问题讨论】:

    标签: ios swiftui combine


    【解决方案1】:

    应该使用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)
                }
            }
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2020-07-12
      • 2021-02-17
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多