首页 > 解决方案 > 嵌套 JSON SwiftUI

问题描述

我检查了本教程https://www.hackingwithswift.com/forums/swiftui/nested-json/4018以修复嵌套 json 问题。

我的 JSON 源已从

[{"title":"title","link":"...","description":"...".... 

{"items":[{..

我原来的结构是这样的

struct Novitads: Codable, Identifiable {
    public var id = UUID()
    public var title: String
    public var pubDate: String
    public var description: String
    public var link: String
    public var image: URL
//    public var pubDate: String
}

现在我补充说:

struct News: Codable {
    var items: [Novitads]
}

这与解决方案的文章一致。

不幸的是,我的 fetch 类现在失败了:

class FetchNovitads: ObservableObject {

@Published var Novitadss = [Novitads]()
@Published var selectedCode: String?
public lazy var selectC: Double = 0.1

let x: Double = 21.25
func refresh() {
    let url = URL(string: "https://testapi-")!
    print (url)
    print (selectedCode)
    print (selectC)
    
    selectC = Double(selectedCode ?? "0") ?? 0.1
    
    URLSession.shared.dataTask(with: url) { data, _, _ in
        do {
            if let NovitadsData = data {
           
                let decodedData = try JSONDecoder().decode(News.self, from: NovitadsData)
                DispatchQueue.main.async {
                    
                    self.Novitadss = decodedData
                }
            } else {
                print("No data")
            }
        } catch {
            print(error)
        }
    }.resume()
}

}

更准确地说, self.Novitadss = decodedData 不能将类型“新闻”的值分配给类型“[Novitads]”当我使用以前的 json 结构(非嵌套)时,这并没有发生,因此不需要 News 结构。

我确信我缺少一些微不足道的东西:)

标签: swiftswiftui

解决方案


如果您解码News,则必须将items数组分配给Novitadss

self.Novitadss = decodedData.items

并请以小写字母开头的属性命名


推荐阅读