Swift,将数组分配给变量的问题

Swift, issue assigning array to variable

所以我有这个文件,它从 api 端点获取一个 JSON 数组,然后应该将它分配给一个可观察的对象变量,以便它可以在 foreach 中检索和迭代环形。我对 Swift 还是很陌生,但看起来确实如此;

import SwiftUI
import Combine
import Foundation

public struct ActivityModel: Codable {
    public let id: Int
    public let name: String
    public let activity_desc: String?
}


public struct ActivitiesModel2: Codable {
    public let location: String
    public let popular: [String:ActivityModel]
}

public struct ActivitiesModel: Codable {
    public let activities: ActivitiesModel2
}

public class ActivityFetcher: ObservableObject {
    var activities: [ActivitiesModel]()

    init(){
        guard let url = URL(string: "http://mywebsite.com/api/loadapi") else { return }

        var urlRequest = URLRequest(url: url)
        urlRequest.httpMethod = "POST"

        URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in

            do {
                if let d = data {
                    let decodedLists = try JSONDecoder().decode(ActivitiesModel.self, from: d)
                    DispatchQueue.main.async {
                        self.activities = [decodedLists]
                    }
                    print(self.activities)
                    print(decodedLists)
                } else {
                    print("No Data")
                }
            } catch {
                print("Error")
            }

        }.resume()
    }
}

在我尝试将 self.activities 等同于 decodedLists 之前,代码工作正常,因为在打印 decodedLists returns 时 JSON API 中的正确数组,在我将其定义为等于 decodedLists 之后打印 self.activities returns:“[]”。为什么它 returns 一个空数组,当它在打印 decodedLists 时被明确定义是超出我的范围。我尝试删除括号,认为它可能将字典转换为数组并失败,但我无法在不返回错误的情况下删除任何括号。

很简单;它只与 what async means 有关。这些代码行按以下顺序执行:

DispatchQueue.main.async {
    self.activities = [decodedLists] // 2
}
print(self.activities) // 1

所以首先你读取并打印 self.activities,它是空的,然后一段时间后你给它一个值 [decodedLists]