Alamofire 和 SwiftyJSON 错误
Posted
技术标签:
【中文标题】Alamofire 和 SwiftyJSON 错误【英文标题】:Alamofire and SwiftyJSON Error 【发布时间】:2015-06-20 21:51:44 【问题描述】:我已经用 Cocoapods 安装了 Alamofire 和 SwiftyJSON。独立地,每个人都工作得很好。但是,当我尝试将两者混合时出现错误。
在使用 Alamofire 之前,我使用 NSURLConnection 下载数据。当 connectionHandler 完成后,我使用 SwiftyJSON 创建了一个 JSON 对象。
let json = JSON(data: self.downloadedData!)
这没有任何问题。
为了让事情更清洁,我想使用 Alamofire。当我使用 Alamofire 时,我尝试使用 SwiftyJSON 创建一个 JSON 对象。
Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON()
(_, _, JSON, _) in
let json = JSON(data: JSON)
当我这样做时,我收到以下错误。
无法使用类型为“(数据: 任何对象?)'
由于 JSON 采用 NSData 参数,因此我尝试了以下方法。
Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON()
(_, _, JSON, _) in
let json = JSON(data: JSON as! NSData)
这给了我以下错误。
无法使用类型为“(数据:NSData)”的参数列表调用“JSON”
我被难住了。有什么想法吗?
【问题讨论】:
【参考方案1】:嘿,我同时使用 Alamofire 和 SwiftyJSON 从图像字典中获取 url 在这里我的代码看起来如何
var Photos = [String]()
override func viewDidLoad()
super.viewDidLoad()
Alamofire.request(.GET, "https://api.500px.com/v1/photos",parameters:["consumer_key":"gRU4LletUCA9RiOQhaJBAt62UyRRYUE6vsIcC7fO"])
.responseJSON _,_,result in
switch result
case .Success(let data):
let json = JSON(data)
self.Photos = self.ParseJSON(json)
case .Failure(_, let error):
print("Request failed with error: \(error)")
debugPrint(self.Photos)
基本上所做的是发出请求,如果成功,我将数据保存在 JSON 对象中,然后我只需解析名为 Photos 的数组中的 image_url
这也是我的 ParseJSON 乐趣
func ParseJSON(json:JSON)->[String]
//Get Image_URL
var pictures = [String]()
for result in json["photos"].arrayValue
pictures.append(result["image_url"].stringValue)
return pictures
我目前正在使用 Almaofire 2.1 以及最新版本的 SwiftyJSON
【讨论】:
【参考方案2】:您必须使用 dataUsingEncoding 对结果进行编码。尝试使用以下代码转换您的结果:
Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseJSON()
(_, _, responseBody, _) in
// Convert the response to NSData to handle with SwiftyJSON
if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let json = JSON(data: data)
println(json)
【讨论】:
感谢您的回复。这一行 if let data = (responseBody as!NSString).dataUsingEncoding(NSUTF8StringEncoding) 调用了以下错误。无法将“__NSCFDictionary”(0x10611ca60)类型的值转换为“NSString”(0x1065ac8e0)。【参考方案3】:lcaro 的回答让我朝着正确的方向前进,但我不得不做出一些改变。下面的代码是 lcaro 的答案。
Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseJSON()
(_, _, responseBody, _) in
// Convert the response to NSData to handle with SwiftyJSON
if let data = (responseBody as NSString).dataUsingEncoding(NSUTF8StringEncoding)
let json = JSON(data: data)
println(json)
我将 responseJON() 更改为 responseString(),然后删除了 responseBody 上的 NSString。
Alamofire.request(.GET, "http://162.209.75.59/json_service.php").responseString()
(_, _, responseBody, _) in
// Convert the response to NSData to handle with SwiftyJSON
if let data = (responseBody).dataUsingEncoding(NSUTF8StringEncoding)
let json = JSON(data: data)
println(json)
【讨论】:
以上是关于Alamofire 和 SwiftyJSON 错误的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 和 SwiftyJSon 在请求函数之外获得价值
Alamofire/Swiftyjson - 将 JSON 类型传递给 Objc 协议委托
没有这样的模块“Alamofire”、“SwiftyJson”、“UiKiT”
数据未使用 Alamofire + SwiftyJSON 加载到 UITableView
在 swift 4.0 中使用 Alamofire/SwiftyJSON 时出错
Swift 3 不能使用 SwiftyJSON 和 Alamofire 为“String”类型的值下标“String”类型的索引