Ниже мой класс, который содержит строку, чтобы определить, какая это страна. Я пытаюсь убедиться, что все они имеют одинаковые представления
import Foundation
class GlobalData: ObservableObject {
@Published var whichCountry: String = "italy"
}
Это мое представление IndepthView, с которого я все начинаю. Я создаю EnvironmentObject для класса globalData. Оттуда я передаю его в другое представление и метод, который использую для обновления информации в IndepthView
import SwiftUI
struct InDepthView: View {
@State var showList = false
@EnvironmentObject var globalData: GlobalData
@ObservedObject var data = getDepthData(globalData: GlobalData())
var body: some View {
VStack(alignment: .leading) {
}
}
}
. Затем я передаю переменную globalData в другое представление, чтобы обновить строку до «usa». Я также проверяю, чтобы убедиться, что он корректно обновлялся.
import SwiftUI
struct ListOfCountriesView: View {
@EnvironmentObject var globalData: GlobalData
var body: some View {
ScrollView {
VStack(spacing: 15) {
Text("List of Countries")
.padding(.top, 25)
Button(action: {
self.globalData.whichCountry = "usa"
self.presentationMode.wrappedValue.dismiss()
}) {
VStack {
Text("usa)")
.font(.system(size: 25))
Divider()
}
}
}
}
}
}
struct ListOfCountriesView_Previews: PreviewProvider {
static var previews: some View {
ListOfCountriesView().environmentObject(GlobalData())
}
}
Но когда я добираюсь до своего класса getDepthData (), он не показывает измененный текст, а просто отображает "italy", когда это должно быть отображение "США". Я не совсем уверен, как передать переменную globalData во все, чтобы убедиться, что она имеет тот же экземпляр
class getDepthData: ObservableObject {
@Published var data : Specific!
@Published var countries : HistoricalSpecific!
var globalDatam: GlobalData
init(globalData: GlobalData) {
globalDatam = globalData
print(globalDatam.whichCountry + " init()")
updateData()
}
func updateData() {
let url = "https://corona.lmao.ninja/v2/countries/" // specific country
let session = URLSession(configuration: .default)
session.dataTask(with: URL(string: url+"\(self.globalDatam.whichCountry)")!) { (data, _, err) in
if err != nil {
print((err?.localizedDescription)!)
return
}
let json = try! JSONDecoder().decode(Specific.self, from: data!)
DispatchQueue.main.async {
self.data = json
}
}.resume()
}
}