Ios Swift 2.0:使用JSON与REST API通信的最佳实践

Ios Swift 2.0:使用JSON与REST API通信的最佳实践,ios,json,swift,rest,nsurl,Ios,Json,Swift,Rest,Nsurl,我开始迁移到Swift,刚刚意识到大多数示例代码在Swift 2.0中不再有效,作为初学者很难入门 那么,使用标准libs中的Swift方法与swift2.0中的restapi通信的最佳实践是什么呢 有人能为以下场景提供Swift 2.0代码吗 从服务获取JSON数据 解析JSON(因此它在Swift中可用) 使用JSON编码的数据发送POST请求 请提供一个没有框架的解决方案。希望它能帮助所有其他试图从Web获取教程的人使用Swift 2.0。我也是一名初学者,我不能说我所做的是最佳实践,但下

我开始迁移到Swift,刚刚意识到大多数示例代码在Swift 2.0中不再有效,作为初学者很难入门

那么,使用标准libs中的Swift方法与swift2.0中的restapi通信的最佳实践是什么呢

有人能为以下场景提供Swift 2.0代码吗

  • 从服务获取JSON数据
  • 解析JSON(因此它在Swift中可用)
  • 使用JSON编码的数据发送POST请求

  • 请提供一个没有框架的解决方案。希望它能帮助所有其他试图从Web获取教程的人使用Swift 2.0。

    我也是一名初学者,我不能说我所做的是最佳实践,但下面是我如何使用NSURLSession和closures处理get请求的

    首先,我定义了一个NetworkOperation类,它将处理NSURLSession。它具有以下属性:

    lazy var config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
    lazy var session: NSURLSession = NSURLSession(configuration: self.config)
    let queryURL: NSURL
    
    在初始值设定项中,我设置了queryURL。配置变量和会话变量是惰性的,因为我希望它们仅在使用网络操作时初始化

    然后,我有了一个执行GET请求并检索JSON的方法。此方法接受闭包作为参数。此闭包将由调用方提供,并允许我将dataTask响应捕获到调用上下文中

    func downloadJSONFromURl(completion: ([String:AnyObject]?) -> ()) {
        let request = NSURLRequest(URL: queryURL)
    
        let dataTask = session.dataTaskWithRequest(request) {
            (let data: NSData?, let response: NSURLResponse?, let error: NSError?) -> Void in
    
            // 1: Check HTTP Response for successful GET request
            guard let httpResponse = response as? NSHTTPURLResponse, receivedData = data
            else {
                print("error: not a valid http response")
                return
            }
    
            switch (httpResponse.statusCode) {
            case 200:
                // 2: Create JSON object with data
                do {
                    let jsonDictionary = try NSJSONSerialization.JSONObjectWithData(receivedData, options: NSJSONReadingOptions.AllowFragments)
                        as? [String:AnyObject]
    
                    // 3: Pass the json back to the completion handler
                    completion(jsonDictionary)
                } catch {
                    print("error parsing json data")
                }
            default:
                print("GET request got response \(httpResponse.statusCode)")
            }
        }
        dataTask.resume()
    }
    
    这个示例非常简单,不处理错误,但您可以看到我如何将JSON解析为一个
    [String:AnyObject]
    的try-catch块

    之后,我将字典发回名为
    completion
    的闭包,该闭包将对JSON执行必要的验证,然后将其转换为Swift对象

    在这个闭包中,我使用可选绑定来安全地构建我的对象。 例如,假设我正在检索一本书,JSON如下所示:
    {书名:“某本书”,作者:“J.Doe”}

    因为我喜欢闭包,所以我将转换后的JSON发送到另一个闭包中,并提供给服务。你可以在我的电脑上看到完整的例子。这是一本树屋教程


    我希望这能有所帮助。

    我建议您尝试真诚地将您找到的Swift 1.2示例之一转换为Swift 2.0。转换真的不是很难。如果您对Swift 2.0语法有疑问,请参阅WWDC 2015视频。在回答你的问题时,我建议你考虑一下,这简化了请求的准备和响应的解析。@ Rob,根据StAdvExcel上的所有评论,我决定作为一个快速的2 bp的特定——因为JSON解析了一些函数参数,正如所说的,初学者很难得到。2015年WWDC视频对第2步没有实际帮助。
    if let title = json["author"] as? String, author = json["author"] as? String {
        let book = Book(title: title, author: author)
        serviceCompletion(book)
    }