Swift ios alamofire 数据在 viewDidLoad 中第一次返回空
Posted
技术标签:
【中文标题】Swift ios alamofire 数据在 viewDidLoad 中第一次返回空【英文标题】:Swift ios alamofire data returning empty first time in viewDidLoad 【发布时间】:2015-06-09 14:06:15 【问题描述】:我正在尝试将数据从 API 加载到我的视图控制器中,但第一次加载数据时返回空
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
方法可能是异步的。检查(或向我们展示)NWService.adsForSection
的工作原理。
我现在更新了我的问题@EricD。
与您使用completionHandler 将Alamofire 的数据从adsForSection
获取到loadInfo
的方式相同,您需要为loadInfo
创建一个处理程序,以便您可以检索异步响应。
感谢@EricD。 ,我对此真的很陌生,所以如何将其添加到 func loadAdInfo(section: String, page: Int) Vendioservice.adsForSection(section, page: page) (JSON) -> () in self.adInfo = JSON ["ad_data"] println(self.adInfo)
【参考方案1】:
您的 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"]
【讨论】:
感谢您的帮助,今天学到了一些新东西。干杯!以上是关于Swift ios alamofire 数据在 viewDidLoad 中第一次返回空的主要内容,如果未能解决你的问题,请参考以下文章
Swift ios alamofire 数据在 viewDidLoad 中第一次返回空
iOS Swift + Alamofire 上传带有 exif 数据的照片
类型“any”在alamofire 4 iOS swift中没有下标成员[重复]