[第一:我是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”非常感谢!
先前的答案提供了一种安全的方法,可以安全地获取数据而不会崩溃,但是您仍未在视图中将getData()函数的结果设置为全局变量。尝试更改getData()函数以返回GlobalResult对象,如下所示:
我从未使用过SwiftUI,但在我看来问题出在其中。与您的var数据有关的东西。我对您的功能做了一些更改。