簡體   English   中英

來自 JSON 的 SwiftUI Picker 數據未顯示

[英]SwiftUI Picker data from JSON not displayed

我在 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() 

網絡管理器.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()
    }
}

學校.swift

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

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

有誰知道,為什么它不起作用?

代替

@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: [])

讓picker刷新就是添加一個唯一的id。 您可以將.id(UUID())添加到您的選擇器中,它應該可以正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM