我已经用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'(数据: AnyObject?)'
由于JSON采用NSData参数,我尝试了以下操作。
Alamofire.request(.GET, "http://162.208.56.92/json_service.php").responseJSON()
{
(_, _, JSON, _) in
let json = JSON(data: JSON as! NSData)
}
这给了我以下错误。
无法使用类型为'(data:NSData)'
的参数列表调用'JSON'
我很难过。有什么想法吗?
答案 0 :(得分:2)
嘿,我在这里使用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
答案 1 :(得分:1)
您必须使用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)
}
}
答案 2 :(得分:0)
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)
}
}