我试图设置一个名为allCountries的已发布变量。在我的DispatchQueue中,它被设置并且实际上将正确的信息打印到控制台中。在我的content view中,数组中没有任何内容。在content view的init函数中,我调用了将获取数据并设置变量的函数,但当我打印到控制台时,该变量为空白。有人可以告诉我我做错了什么吗?
这里是我获取数据的位置
class GetCountries: ObservableObject {
@Published var allCountries = [Countries]()
func getAllPosts() {
guard let url = URL(string: "apiURL")
else {
fatalError("URL does not work!")
}
URLSession.shared.dataTask(with: url) { data, _, _ in
do {
if let data = data {
let posts = try JSONDecoder().decode([Countries].self, from: data)
DispatchQueue.main.async {
self.allCountries = posts
print(self.allCountries)
}
} else {
DispatchQueue.main.async {
print("didn't work")
}
}
}
catch {
DispatchQueue.main.async {
print(error.localizedDescription)
}
}
}.resume()
}
这是我的内容视图
struct ContentView: View {
var countries = ["Select Your Country", "Canada", "Mexico", "United States"]
@ObservedObject var countries2 = GetCountries()
@State private var selectedCountries = 0
init() {
GetCountries().getAllPosts()
print(countries2.allCountries)
}
var body: some View {
NavigationView {
ZStack {
VStack {
Text("\(countries2.allCountries.count)")}}}
getAllPosts()
。他是在一个新的实例上调用它的。请注意类型名称后面的括号。尽管如此,你说的其他部分是正确的。 - Peter Schorn