Alamofire 访问将数据附加到全局变量
Posted
技术标签:
【中文标题】Alamofire 访问将数据附加到全局变量【英文标题】:Alamofire access append data to global variable 【发布时间】:2017-05-10 22:00:04 【问题描述】:我在调用 Alamofire 并将 JSON 数据附加到全局数组时遇到了一些麻烦,我真的开始感到压力了。
我了解在进行 API 调用时,它是在异步线程中完成的。然而,在对此事进行研究之后,我遵循了建议,但我迷失了,因为在每个人的例子中,他们只打印数据,并且有效,但是当我尝试将数据附加到数组时,我仍然计数为 0。
class SomeClass: UIViewController
var categories = [Int]()
@IBOutlet var labels: [UILabel]!
override func viewDidLoad()
super.viewDidLoad()
self.getJSON() response in
self.populateArray(json: response)
//This prints 0 :(
print("Size: \(categories.count)")
var count = 1
for lbl in labels
for var i in 0..<categories.count
//Obviously this never computes so they all are black instead of some being red
lbl.tintColor = count == categories[i] ? UIColor.Red : UIColor.Black
public func getJSON(completionhandler: @escaping (JSON) -> ()) ()
Alamofire.request("some url").responseJSON response in
switch response.result
case .success:
let jsonData = JSON(data: response.data!)
completionHandler(jsonData)
case .failure(let error):
print(error)
public func populateArray(json: JSON) -> ()
//JSON still prints fine
print(json)
for (index, subJson):(String, JSON) in json
//Again, prints fine
print(subJson["catID"].int!)
self.categories.append(subJson["catID"].ind!)
有谁知道我做错了什么?或者如果它首先是可以实现的,如果不能,是否有替代方案来实现我所追求的?
非常感谢。
【问题讨论】:
【参考方案1】:如果您希望该代码在getJson
之后直接执行,那么您需要将该代码放入闭包中。
self.getJSON() response in
self.populateArray(json: response)
print("Size: \(categories.count)")
var count = 1
for lbl in labels
for var i in 0..<categories.count
lbl.tintColor = (count == categories[i] ? UIColor.Red : UIColor.Black)
【讨论】:
虽然这提供了一个解决方案,只是出于好奇,如果我不希望代码直接执行,还有其他方法吗?以上是关于Alamofire 访问将数据附加到全局变量的主要内容,如果未能解决你的问题,请参考以下文章
Linux编程 11(shell全局环境变量与局变环境变量)
使用 Alamofire + SwiftyJSON 定义全局变量