Alamofire附加数据

时间:2017-01-12 09:23:35

标签: ios swift alamofire

我有一个简单的Alamofire请求,我用SwiftyJSON解析它。这是代码:

var fetchedData: [TestDB]? = []

func fetchData() {
    Alamofire.request(url!, method: .get).validate().responseJSON { response in
        switch response.result {
        case .success(let value):
            let json = JSON(value)

            self.fetchedData = [TestDB]()

            for dict in json["articles"].array! {

                let data = TestDB()

                if let image = dict["urlToImage"].string {
                    data.imageUrls = image
                }

                if let titlee = dict["title"].string {
                    data.titlee = titlee
                }

                if let desc = dict["description"].string {
                    data.desc = desc
                }

                self.fetchedData?.append(data)
                // If i print fetchedData here, i can see it has right values.
                // print(fetchedData)

            }
        case .failure(let error):
            print(error)
        }
    }
        // If i try to print fetchedData here, it's empty.
}

正如我在代码中所说,我无法追加并使用我的数据。我认为 Alamofire是异步的东西。但无法弄清楚原因。任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:2)

当您使用异步方法时,您可以继续进行某些操作,例如:

  • 使用回叫
  • 使用RAC /观察

回调:

func fetchData(completion: (result: [TestDB]) -> ) {
    Alamofire.request(url!, method: .get).validate().responseJSON { response in
       self.fetchedData = [TestDB]()
       // fill self.fetchedData then:
       completion(self.fetchedData) 
    }
})

你调用fetchData的地方:

self.fetchData(completion: { 
    // update collectionview?
    self.collectionView.reloadData() 
})

<强> RAC:

您可以找到所有文档here

<强>加:

一些建议:

  • self.fetchedData = TestDB不是必需的,可能就足够了self.fetchData.removeAll()

  • 使用ObjectMappar将任何json响应映射到对象