Alamofire是IOS开发时高效的网络第三方工具库,有时我们需要将本地的一些数据调用API上传到云端,再接收处理完成后的结果,在这个过程中,最终我们需要的信息是以JSON串进行返回的。
下面,我将以一个单词信息查询API为例,演示Alamofire的使用方法。
首先列出该API返回的JSON串格式:
{
"word": "cell",
"accent": "/sel/",
"mean_cn": "n.\u7ec6\u80de\uff1b\u5c0f\u9694\u95f4",
"mean_en": "the smallest part of an animal or plant that is able to function independently",
"sentence": "White blood cells help protect the body against viruses.",
"sentence_trans": "\u767d\u7ec6\u80de\u53ef\u4ee5\u4fdd\u62a4\u8eab\u4f53\uff0c\u6d88\u706d\u75c5\u6bd2\u3002",
"sentence_phrase": "White blood cells",
"word_etyma": "",
"cloze_data": {"syllable": "cell", "cloze": "c[el]l", "options": ["al|le|nl|ol"], "tips": [["ovic[el]l", "enc[el]l"]]}
}
对于类似格式的JSON串可能会有很多种处理方法,这里给出一种已测试可行且直观的处理方法。
let url = ""
Alamofire.AF.request(url).responseData { (response ) in
if response.error == nil{
let jsonData=response.value
let dict = try? JSONSerialization.jsonObject(with: jsonData!, options: .mutableContainers)
if(dict != nil){
let value : NSDictionary = dict as! NSDictionary
if value["sentence"] != nil,value["sentence_trans"] != nil {
let accent : String = value["accent"] as! String
let sentence : String = value["sentence"] as! String
let sentence_trans : String = value["sentence_trans"] as! String
}
}
}
}
接下来将对上述代码进行补充。
首先是对网络地址的定义,这是你发出请求的地址,在浏览器中输入该地址,应该直接出现JSON串,即你的请求结果。后面使用了一个闭包,为的是等待解析结果,在这个请求周期结束以后,这个闭包还会继续等待执行,直到请求的结果被装入变量response,闭包开始进行下一步处理。
let jsonData=response.value
let dict = try? JSONSerialization.jsonObject(with: jsonData!, options: .mutableContainers)
这两句代码是解析结果的关键,主要是通过了JSONSerialization这样一个内置类的函数,将response中的Data数据储存类强制转换成了字典。这样,将结果转换成字典后只需要简单的映射就可以获取信息了。