我在watchOS 6上有一个独立的应用程序,在我的应用程序中,我正在使用Firestore REST API使用URLSession
向用户显示数据。
由于Cloud Firestore REST API返回JSON字符串,因此为了处理数据,我创建了嵌套结构。示例:要访问特定响应中的“标题”,我需要执行以下操作:response.mapValue.fields.title.stringValue
。
该应用目前可以正常运行。从长远来看,我计划将URLSessions创建为后台任务。现在,每次在数据的URLSession
视图上使用.onAppear(functionToUseURLSession())
来渲染视图时,我都会调用List
。
现在,我要实现的下一件事是此特定应用程序的复杂性。
我是Swift和SwiftUI的新手,入门最困难。我在线上经历的所有教程都使用WKExtensionDelegate
来获取并发症的数据模型。
但就我而言,我什至没有数据模型!我只是有一些结构以嵌套的方式调用其他结构,以便处理从API调用获得的JSON响应。
任何帮助我了解这一点的帮助都将受到赞赏!
以下代码可以更好地了解App的结构:
struct Firebase: Codable {
var name: String?
var createTime, updateTime: String?
var fields: FirebaseFields
}
现在,FirebaseFields
也是另一个结构:
struct FirebaseFields: Codable {
var emailID, lastName, firstName: String?
var goalsRoutines: GoalsRoutines
enum CodingKeys: String, CodingKey {
case emailID = "email_id"
case lastName = "last_name"
case firstName = "first_name"
}
}
类似地,GoalsRoutines
也是一个结构...
如上所述,我使这些结构遵循Firebase API响应的JSON对象的确切结构。因此,我访问如下字段:Firebase.FirebaseFields.GoalsAndRoutines.whatever.is.my.firebase.schema
我的GoalsView.swift
是:
var body: some View {
List{
...
...
}.onAppear{
FirebaseServices.getFirebaseData() {
(data) in self.data = data
}
}
}
最后,在FirebaseServices.swift
中,func getFirebaseData
是:
func getFirebaseData(completion: @escaping ([Value]) -> ()) {
guard let url = URL(string: "FIRESTORE URL HERE") else { return }
URLSession.shared.dataTask(with: url) { (data, _, _) in
let data = try! JSONDecoder().decode(Firebase.self, from: data!)
DispatchQueue.main.async {
completion(data.fields.goalsRoutines.arrayValue.values)
}
}.resume()
}
这就是我目前如何获取数据并将其显示在应用程序上的方法。
我真的不知道如何在并发症中做同样的事情。
我们非常感谢您的帮助。