在 swift 中 ViewDidLoad() 中调用的函数的完整执行之前,正在调用 CollectionView

问题描述

我在 viewDidLoad 方法中有函数调用,就像那样

override func viewDidLoad(){
super.viewDidLoad()
    getSubCategories()
}

函数定义如下

func getSubCategories(){        
    let parameters = xx
    let url = URL(string: "xx")!
    let session = URLSession.shared
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    
    do {

        request.httpBody = try JSONSerialization.data(withJSONObject: parameters,options: .prettyPrinted)
    } catch let error {
        print(error.localizedDescription)
    }
    
    let task = session.dataTask(with: request as URLRequest,completionHandler: { [self] data,response,error in
        do {
            if (try JSONSerialization.jsonObject(with: data,options: .mutableContainers) as? [String: Any]) != nil {

函数一直执行到这里然后跳转task.resume,然后跳过代码

        subCategoryModel = try JSONDecoder().decode(SubCategoryModel.self,from: data)
        print(subCategoryModel!)
            }
        } catch let error {
            print(error)
        }
    })
    task.resume()

在解码数据之前,collectionViews 开始重新加载并显示值为零的错误。 我已经在 viewdidload 中设置了委托和数据源。解码后加载collectionsviews的代码怎么写。

解决方法

>>> df = fill(df,'value1',['March','April','May']) >>> df city value1 March April May value2 Jun Jul Aut 0 bj 12 12.0 NaN NaN 15 NaN NaN NaN 1 sh 8 NaN NaN 8.0 13 NaN NaN NaN 2 gz 9 NaN 9.0 NaN 9 NaN NaN NaN 3 sz 6 NaN 6.0 NaN 16 NaN NaN NaN >>> df = fill(df,'value2',['Jun','Jul','Aut']) >>> df city value1 March April May value2 Jun Jul Aut 0 bj 12 NaN NaN 12.0 15 NaN NaN 15.0 1 sh 8 NaN NaN 8.0 13 13.0 NaN NaN 2 gz 9 NaN NaN 9.0 9 NaN NaN 9.0 3 sz 6 NaN 6.0 NaN 16 NaN NaN 16.0 正在后台运行。所以它与其余代码不并行。如果您希望下面的部分运行,请执行以下操作:

你将等待的类:

DataTask

现在在您的 class Observable<T> { var didChange: ((T?) -> Void)? var value: T? { didSet { // This is for the code to go back to the main thread before running DispatchQueue.main.async { self.didChange?(self.value) } } } init(_ value: T? = nil) { self.value = value } deinit { didChange = nil } } 上:

ViewController