簡體   English   中英

SwiftUI:等待JSON被解碼之前

[英]SwiftUI: Waiting for JSON to be decoded before

我在視圖中顯示反序列化的 JSON object 時遇到問題。 問題似乎是我的觀點是試圖從已發布的變量中解開一個值,然后再由獲得 JSON object 的 function 分配給它。

這是調用 api 的代碼

class ViewModel : ObservableObject {
    
    @Published var posts : first?
    
    init(subReddit : String){
        fetch(sub: subReddit)
    }
    
    func fetch(sub : String) {
        guard let url = URL(string: "https://www.reddit.com/r/" + sub + "/top.json?t=day") else {
            return
        }
        
        let task = URLSession.shared.dataTask(with: url) { [weak self] data, _, error in
                                                            guard let data = data, error == nil else {return}
            do{
                let retVal = try JSONDecoder().decode(first.self, from:data)
                DispatchQueue.main.async {
                    self?.posts = retVal
                }
            }
            catch{
                print(error)
            }
        }
        task.resume()
    }
        
    }

這是我的觀點的代碼:

struct SubRedditView: View {
    @StateObject var viewModel = ViewModel(subReddit: "all")
    var body: some View {
        NavigationView{
            List{
                ForEach((viewModel.posts?.data.children)!) {post in//at runtime I get a nil unwrap error here
                    Text(post.data.title)
                    Text(post.data.url_overridden_by_dest ?? "No Value")
                }
            }
        .navigationTitle("Posts")
    }
}
}

如果只有代表children的 object 相關,則將發布的 object 聲明為該類型的空數組

@Published var posts = [TypeOfChildren]()

然后將孩子分配給數組

self?.posts = retVal.data.children

這使得視圖中的代碼更容易和安全。

 ForEach(viewModel.posts) { post in
        Text(post.title)
        Text(post.url_overridden_by_dest ?? "No Value")

暫無
暫無

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

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