【发布时间】:2021-02-27 10:44:14
【问题描述】:
我在 viewDidLoad 方法中有这样的函数调用
override func viewDidLoad(){
super.viewDidLoad()
getSubCategories()
}
而func定义如下
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 开始重新加载并显示值为 nil 的错误。 我已经在 viewdidload 中设置了委托和数据源。如何编写解码过程后加载集合视图的代码。
【问题讨论】:
-
session 是异步调用,task.resume 启动调用从服务器获取数据,一旦你收到你的数据闭包块被调用,然后你需要处理你的场景。 stackoverflow.com/questions/25203556/…
-
只需在
print(subCategoryModel!)行之后的集合视图上(在主线程上)调用reloadData。而你所有的JSONSerialization选项都是毫无意义的。服务器不关心漂亮打印的 JSON,mutableContainers在 Swift 中完全没用。
标签: swift function uicollectionview