【问题标题】:SwiftUI Picker data from JSON not displayed未显示来自 JSON 的 SwiftUI Picker 数据
【发布时间】:2019-12-12 20:36:29
【问题描述】:

我在 swiftui 中有一个选择器,我需要从我当前托管在我的 mac 上的 json 中填充它。

当我运行代码时,显示的选择器保持为空,但数据可用(如果我点击下方的按钮打印它)。

这是我的代码:

选择器(ContentView.swift):

@State var nwm = NetworkManager()

...

Picker("Wähle deine Schule", selection: $selectedSchool) {
    ForEach(0 ..< nwm.schoolList.results.count) {
        Text(self.nwm.schoolList.results[$0].name).tag($0)
    }
}.labelsHidden() 

NetworkManager.swift:

class NetworkManager : ObservableObject {
    var didChange = PassthroughSubject<NetworkManager, Never>()

    var schoolList = SchoolList(results: []) {
        didSet {
            didChange.send(self)
        }
    }

    init() {
        guard let url = URL(string: "http://jonasmacbookpro.local:8083/IOSApp/getDKSchools") else { return }

        URLSession.shared.dataTask(with: url) {
            (data, _, _) in

            let schoolList = try! JSONDecoder().decode(SchoolList.self, from: data!)

            DispatchQueue.main.async {
                self.schoolList = schoolList
            }
        }.resume()
    }
}

School.swift

struct School : Identifiable, Decodable {
    let id = UUID()
    var name : String
    var ort : String
    var link : String
}

struct SchoolList: Decodable {
    var results: [School]
}

有谁知道,为什么它不起作用?

【问题讨论】:

    标签: ios json swift swiftui picker


    【解决方案1】:

    代替

    @State var nwm = NetworkManager()

    使用

    @ObservedObject var nwm = NetworkManager()
    

    而不是

    var didChange = PassthroughSubject<NetworkManager, Never>()
    
    var schoolList = SchoolList(results: []) {
        didSet {
            didChange.send(self)
        }
    }
    

    使用

    @Published var schoolList = SchoolList(results: [])
    

    【讨论】:

    • 这适用于静态列表,但不适用于从 json 文件创建的列表,这是我需要的情况。
    【解决方案2】:

    要使选择器刷新是添加一个唯一的 id。您可以将 .id(UUID()) 添加到您的 Picker 中,它应该可以正常工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多