如何在本地阵列swift 3中保存Alamofire的response.result.value

时间:2017-05-04 11:05:02

标签: arrays json swift parsing alamofire

Alamofire.request(NEWS_FEED_URL).responseJSON { response in

guard let newsResponse = response.result.value else{
        print("Error: \(response.result.error)")
        return
    }
    print("JSON: \(newsResponse)")
    let localArray:Array = [newsResponse]
    print("Local Array:", localArray)
}



I am using alamofire to fetch data from server and trying to write parser on the response data. When I fetch response.result.value from alamofire and print it is working fine. But as soon as I put response.result.value in my local array it gives  


[<__NSArrayI 0x6080000bcf80>(
{
    category = World; 
})]

等结果(控制台)。此外,我无法将“Any”类型的响应值转换为“Array”。请帮助我如何在“Array”类型的本地数组中添加response.result.value。有人可以简单解释一下关于alamofire上的类型转换吗?

3 个答案:

答案 0 :(得分:2)

您只需将response.result.value的结果转换为数组字典。

guard let newsResponse = response.result.value as? [[String:String]] else{
    print("Error: \(response.result.error)")
    return
}
print("JSON: \(newsResponse)")
let localArray = newsResponse
//Access the localArray
print("Local Array:", localArray)
//Now to get the desired value from dictionary try like this way.
let dic = localArray[0]
let title = dic["title"] ?? "Default Title"
let link = dic["link"] as? "Default link"
//... get other value same way.

注意:您的回复已经是Array,因此请不要通过将其添加到另一个数组中来制作数组。

答案 1 :(得分:1)

responseJOSN结果存在问题,因为结果可能无法更正JSON格式以更正使用[[String:Any]]格式化JSON

Alamofire.request(NEWS_FEED_URL).responseJSON { response in
    guard let newsResponse = response.result.value as? [[String:Any]] else{
            print("Error: \(response.result.error)")
            return
        }
        print("JSON: \(newsResponse)")
        let firstRow = newResponse[0]
        let categoryValue = firstRow["category"] ?? "Default Category"
       }

答案 2 :(得分:0)

如果使用可解码技术,则可以将响应中的数据保存为用户默认值。用户默认设置允许我们保存数据。当需要时,您可以使用JSON解码器解码JSON数据。