Alamofire:使用 JSON 数据更新数组的值
Posted
技术标签:
【中文标题】Alamofire:使用 JSON 数据更新数组的值【英文标题】:Alamofire : Updating array's values with JSON's data 【发布时间】:2015-11-14 16:49:29 【问题描述】:我在尝试使用 JSON 数据更新结构数组时遇到问题。这是我的代码:
结构体是这样定义的: Struct
struct Shot
var title: String
var desc: String
var img: String
init(title: String, desc: String, img: String)
self.title = title
self.desc = desc
self.img = img
在这里我尝试更新数组,但它不起作用: Code
func authDribbble()
let endURL = "https://api.dribbble.com/v1/shots/"
let token = "***"
Alamofire.request(.GET, endURL, parameters: ["access_token" : token])
.responseJSON response in
if let JSON = response.result.value
for i in 0..<JSON.count
let titleA: String = String(JSON[i]["title"])
let descA: String = String(JSON[i]["description"])
let imgA: String = String(JSON[i]["images"])
self.data += [Shot(title: titleA, desc: descA, img: imgA)]
问题是函数执行后,数组保持为空。怎么了? 谢谢。
【问题讨论】:
请在您的问题中包含实际代码,而不是链接到它的图像;链接可能会失效,并且图像不能轻易复制到编辑器中进行测试。 另一个注意事项:您在 Shot 结构中定义的 init 复制了结构类型提供的默认初始化程序。您可以删除它并仍然调用 Shot(title: "", desc: "", img: "") 并且它的工作方式相同。 @geraldWilliam 好的,谢谢 @CalebBrinkman 你是对的。抱歉,我是 Stack Overflow 的新手,我不知道该怎么做!谢谢。 【参考方案1】:假设您已按如下方式调用此方法:
authDribbble()
print("my data: \(self.data)") // Prints empty array.
问题在于 Alamofire 正在异步执行请求。也就是说,当您的代码进行到下一行(打印语句)时,工作还没有完成。你需要实现一个回调机制。一种方法是将函数作为authDribbble()
函数的参数传递。这会将函数更改为:
func authDribbble(completion: () -> Void)
// create the url
// create parameters
Alamofire.request(.GET, url!, parameters: params)
.responseJSON response in
guard let JSON = response.result.value as? [[String : AnyObject]] else
// Wrong type in JSON response.
print(response.result.error)
self.data = JSON.map dict in
guard let title = dict["title"] as? String,
desc = dict["description"] as? String,
img = dict["images"] as? String else
// Handle error creating Shot from JSON
return Shot(title: title, desc: desc, img: img)
completion()
然后,您将对authDribbble()
的调用替换为:
authDribbble()
print("data: \(self.data)") // Prints populated array.
【讨论】:
您已经筋疲力尽了,谢谢。但是有一个问题。我按照你说的更新了代码,但它仍然没有打印任何东西。有什么想法吗? 这里是代码:link 哈,哎呀,你是对的。我错过了最重要的部分,调用完成闭包!查看编辑。以上是关于Alamofire:使用 JSON 数据更新数组的值的主要内容,如果未能解决你的问题,请参考以下文章
Swift 搜索栏 - 使用 Alamofire 请求更新表格视图
如何使用新的 Swift 3 和 Alamofire 解析 JSON(字典和数组)
使用 Alamofire 和 SwiftyJSON 正确解析具有多个对象的 JSON 数组