未显示来自 JSON 的 SwiftUI Picker 数据
Posted
技术标签:
【中文标题】未显示来自 JSON 的 SwiftUI Picker 数据【英文标题】:SwiftUI Picker data from JSON not displayed 【发布时间】: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]
有谁知道,为什么它不起作用?
【问题讨论】:
【参考方案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 中,它应该可以正常工作
【讨论】:
以上是关于未显示来自 JSON 的 SwiftUI Picker 数据的主要内容,如果未能解决你的问题,请参考以下文章
显示来自 Observable Object SwiftUI 的列表
来自 JSON/Dictionary 的 SwiftUI 列表
Promtail 和 Grafana - 来自 docker 容器的 json 日志文件未显示