【问题标题】:How to call rest web service from swift如何从 swift 调用 REST Web 服务
【发布时间】:2014-10-03 10:29:29
【问题描述】:

我正在尝试遵循一个教程 - 失败并且在堆栈上找到了一些代码溢出 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);
        }
    })

【问题讨论】:

  • 您没有正确传递 error 对象。将其定义为var error: NSError?,并以..., error: &amp;error) 传递; Swift 会为您来回转换为指针。见Adopting Cocoa Design Patterns

标签: json rest swift


【解决方案1】:

问题是调用返回的数据是 JSONP 而不是 JSON

如果使用像 http://ip.jsontest.com 这样的正确 JSON 进行测试,您的代码可以正常工作

要使其与 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);
}

【讨论】:

  • 您还可以通过在 URL 中添加参数 nojsoncallback=1 来告诉 Flickr API 直接返回 JSON 而不是 JSONP。
  • @abinop 你能让这个例子更清楚一点,并将它与他的代码集成吗?那将非常有帮助。谢谢。
猜你喜欢
  • 2016-08-26
  • 2017-02-18
  • 2015-12-04
  • 1970-01-01
  • 2013-01-14
  • 2011-07-25
  • 2015-03-17
  • 1970-01-01
  • 2011-02-16
相关资源
最近更新 更多