gpt4 book ai didi

ios - Swift ios alamofire 数据在 viewDidLoad 中第一次返回空

转载 作者:行者123 更新时间:2023-11-29 01:57:01 24 4
gpt4 key购买 nike

我正在尝试将数据从 API 加载到我的 View Controller 中,但它第一次加载数据时返回空

import UIKit

class AdViewController: UIViewController {

var adId: Int!

var adInfo: JSON! = []

override func viewDidLoad() {
super.viewDidLoad()

loadAdInfo(String(adId),page: 1)

println(adInfo) // This shows up as empty

}



func loadAdInfo(section: String, page: Int) {
NWService.adsForSection(section, page: page) { (JSON) -> () in
self.adInfo = JSON["ad_data"]

println(self.adInfo) // This shows up with data

}
}

我在调用“println(adInfo)”之前运行“loadAdInfo()”,但它仍然显示为一个空数组

adsForSection:

static func adsForSection(section: String, page: Int, response: (JSON) -> ()) {
let urlString = baseURL + ResourcePath.Ads.description + "/" + section
let parameters = [
"page": toString(page),
"client_id": clientID
]
Alamofire.request(.GET, urlString, parameters: parameters).responseJSON { (_, res, data, _) -> Void in
let ads = JSON(data ?? [])
response(ads)

if let responseCode = res {
var statusCode = responseCode.statusCode
println(statusCode)
}

println(ads)

}
}

最佳答案

您的loadAdInfo 方法是异步的。

与您使用 completionHandler 将 Alamofire 的数据从 adsForSection 获取到 loadInfo 的方式相同,您需要为 loadInfo 创建一个处理程序> 这样您就可以检索异步响应。

像这样:

func loadAdInfo(section: String, page: Int, handler: (JSON) -> ()) {
NWService.adsForSection(section, page: page) { (JSON) -> () in
handler(JSON)
}
}

在你的 viewDidLoad 中:

loadAdInfo(String(adId), page: 1) { handled in
println(handled["ad_data"])
self.adInfo = handled["ad_data"]
}

关于ios - Swift ios alamofire 数据在 viewDidLoad 中第一次返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com