swift - Alamofire 访问附加数据到全局变量

标签 swift alamofire global completionhandler

我在执行 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!)
        }
    }
}

有谁知道我做错了什么?或者如果它首先是可以实现的,如果不能,是否有其他方法可以实现我所追求的目标?

非常感谢。

最佳答案

如果您希望该代码在 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)
        }
    }
}

关于swift - Alamofire 访问附加数据到全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43903391/

相关文章:

ios - 从服务器获取值的异步问题

javascript - 某些 Javascript 在单个页面上工作,但在通过 Drupal 主题的 javascript 全局加载时不起作用

r - 在 R 中本地(而不是全局)设置种子

python - 访问本地环境中的全局变量

ios - 从 PDFDocument iOS 获取页面大小

swift - 何时在 swift 中使用三种不同形式的关键字 "as"

ios - 有没有办法记录应用程序输出的所有声音?

快速表格 View 填充单元格会导致内容混合

ios - 完成 block 处理空数组

swift - Alamofire参数冲突