【发布时间】:2020-06-06 19:44:52
【问题描述】:
首先:我是 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 的教程,并且可以使其正常工作。有人可以帮我吗? 当我删除 if 语句 它说“致命错误:在隐式展开可选值时意外发现 nil” 非常感谢!
【问题讨论】:
-
if 语句中显示的
localizedDescription是什么? -
tbh,我真的不知道,它来自教程。但我认为那是错误
-
几件事:避免使用
!来强制包装可选值。而不是 print((err?.localizedDescription)!) 做 print((err?.localizedDescription) ?? "")。这应该可以帮助您进一步调试以及发生了什么。 -
与
data!相同。我没有意识到你在两个不同的地方大获全胜。无论发生 fata 错误,您都希望它优雅地失败,以便您可以继续调试您的问题 -
我应该如何处理“!”?
标签: ios json swift api swiftui