如何从swift调用rest web服务

时间:2014-10-03 10:29:29

标签: json rest swift

我正在尝试按照教程 - 失败并在堆栈上发现一些代码流Make REST API call in Swift决定尝试这种方法。下面的代码是一个复制和粘贴(我知道!),更改了URL但我似乎得到一个错误打印到控制台而不是JSON - 错误基本上没有用 - 0x0000000000000000

JSON似乎打印到浏览器窗口,所以我不完全确定这种方法可能出错?请有人可以提供一些帮助,说明为什么这可能不起作用?

由于

    var url : String = "http://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=d6e995dee02d313a28ed4b799a09b869"
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: url)
    request.HTTPMethod = "GET"

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
        let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

        if (jsonResult != nil) {
            println(jsonResult);
        } else {
            // couldn't load JSON, look at error
            println(error);
        }
    })

1 个答案:

答案 0 :(得分:2)

问题是调用以JSONP而不是JSON

返回数据

如果使用正确的JSON(例如http://ip.jsontest.com

)进行测试,您的代码将正常工作

要使其与Flickr一起使用,您必须按如下方式修改它:

var json_str:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)


json_str = json_str.substringFromIndex(14)
json_str = json_str.substringToIndex(json_str.length-1)

let new_data:NSData = json_str.dataUsingEncoding(NSUTF8StringEncoding)!


var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(new_data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

if (jsonResult != nil) {
    println(jsonResult);
} else {
    // couldn't load JSON, look at error
    println(error);
}