微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI 从具有条目值的 URL 解析 json

如何解决SwiftUI 从具有条目值的 URL 解析 json

当我需要将一个 json 文件加载到 swiftUI 时,我被卡住了,而这个 json 来自一个 URL,其中的入口变量必须由用户获取数据之前填写。 我有以下代码

// This is the structure to get the data from the API.

struct loka_result: Codable {
    var date: String
    var time: String
    var unix_time: Int
    var seqNumber : Int
    var lat: Double
    var lng: Double
    var device: String
    var accuracy: Double
    var info: String
    var temperature : Double?
    var battery_voltage : Float?
}


// Now conform to Identifiable
extension loka_result: Identifiable {
    public var id: Int { return unix_time }
}

// Model Data to get the data

final class ModelData: ObservableObject {
    
    @Published var allthelokas : [loka_result] = loadAllData(deviceid:selected_loka,timedelta: selected_delta)
    
}

// Function to get and parse the data

func loadAllData<T: Decodable>(deviceid:String,timedelta:Int) -> T

{
    
let url = URL(string: "https://xxxx.PHP?device=\(deviceid)&hours=\(timedelta)"),data = try? Data(contentsOf: url!)
    return
        try! JSONDecoder().decode(T.self,from: data!)
}

然后在 TempChartView 中我想得到一个列表


import SwiftUI

struct TempChartNew: View {
    
    
    @EnvironmentObject var modelData: ModelData
    
    var body: some View {
        
        vstack {
            List(modelData.allthelokas) { j in
               // ForEach(modelData.allthelokas) { jj in
                    HStack {
                        Text(j.device)
                        Text(j.date)
                        Text(j.time)
                        Text(String(j.seqNumber))
                    }
                    
               
 
                
            }
        }
    }
}

struct TempChartNew_Previews: PreviewProvider {
    static var previews: some View {
        TempChartNew().environmentObject(ModelData())
      
    }
}

所有这些都有效,因为只是为了测试它,我添加了两个全局变量来填充函数的数据。

var selected_loka: String = "3JJJ30"
var selected_delta: Int = 24

但想法是让视图有两个入口点。 它在这里我被卡住了!我不知道如何将变量传递给类。 有谁可以指出我正确的方向吗? - 谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。