使用API 时,我在这里做错了什么?

问题描述 投票:-1回答:2

[第一:我是Swift和SwiftUI的初学者。我将不胜感激,即使它与我的问题无关!现在我的问题是:为了练习SwiftUI和API,我想构建一个小应用程序,显示一些有关冠状病毒的数据,非常简单。这是我使用的API:Coronavirus API。现在这是我的代码:

import SwiftUI

struct GlobalResult: Decodable {
    var cases: Int
    var deaths: Int
    var recovered: Int
}

struct Statistics : View {
    @State var global: GlobalResult!

    var body: some View {
         VStack {
              VStack {
                Text("\(self.global.cases)")
              }
         }.onAppear() {
               ApiShared.shared.getData()
         }
     }
}



class Api {
    @Published var data: GlobalResult!

func getData() {
    let url = "https://corona.lmao.ninja/v2/all"

    let session = URLSession(configuration: .default)

    session.dataTask(with: URL(string: url)!) { (data, _, err) in

        if err != nil {

            print((err?.localizedDescription)!)
            return
        }

        let json = try! JSONDecoder().decode(GlobalResult.self, from: data!)

        DispatchQueue.main.async {
            self.data = json
        }
    }
    .resume()
}
}

class ApiShared {
    static let shared = Api()
}

struct Statistics_Previews: PreviewProvider {
    static var previews: some View {
        Statistics()
    }
}

但是它不起作用!我遵循了一些有关YT的教程,可以使其正常运行。谁能帮我吗?当我删除如果声明它说:“致命错误:在隐式展开一个可选值时意外发现nil”非常感谢!

ios json swift api swiftui
2个回答
1
投票

先前的答案提供了一种安全的方法,可以安全地获取数据而不会崩溃,但是您仍未在视图中将getData()函数的结果设置为全局变量。尝试更改getData()函数以返回GlobalResult对象,如下所示:


0
投票

我从未使用过SwiftUI,但在我看来问题出在其中。与您的var数据有关的东西。我对您的功能做了一些更改。

© www.soinside.com 2019 - 2024. All rights reserved.