• Swift中的HTTP请求


    iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。

    注意:网络请求完成后会获得一个NSData类型的返回数据,如果数据格式为JSON,那么可以使用系统自带的NSJSONSerialization类来解析数据;或者使用SwiftyJSON库的使用和思考一文中提到的JSON解析库来解析数据。

    1. 使用NSURLConnection

    下面例子使用NSURLConnection实现了一个简单的异步GET操作:

    复制代码
    func requestUrl(urlString: String){
            var url: NSURL = NSURL(string: urlString)
            let request: NSURLRequest = NSURLRequest(URL: url)
    
            NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler:{
                (response, data, error) -> Void in
    
                    if error? {
                        //Handle Error here
                    }else{
                        //Handle data in NSData type
                    }
    
                })
        }
    复制代码

    2. 使用YYHRequest-Swift

    这个库通过封装NSURLConnectionNSOperationQueue实现了简单的HTTP GET/POST/PUT/DELETE操作:

    let request = YYHRequest(url: NSURL(string: "http://www.google.com/"))
    
    request.loadWithCompletion { response, data, error in
        // request complete!
    }

    3. 使用SwiftHTTP库。

    这个库通过封装NSURLSession,提供了GET/POST/PUT/DELETE以及上传和下载的支持,比较全面:

    var request = HTTPTask()
    request.GET("http://vluxe.io", parameters: nil, success: {(response: AnyObject?) -> Void in
    
        },failure: {(error: NSError) -> Void in
    
        })

    4. 使用Objective-C中的AFNetworking网络库

    AFNetworking库是在iOS开发领域享有盛名、功能强大的网络请求库。

    • 首先将AFNetworking库引入工程,请参考这篇教程
    • 然后在<ProjectName>-Bridging-Header.h头文件中引入AFNetworking:
      #import “AFNetworking/AFNetworking.h”

      下面简单展示了AFNetworkingGET的用法:

      复制代码
      func requestUrl(urlString: String) {
              let manager = AFHTTPRequestOperationManager()
      
              let params = ["a":1, "b":2]
      
              manager.GET(urlString,
                  parameters: params,
                  success: { (operation: AFHTTPRequestOperation!,
                      responseObject: AnyObject!) in
      
                      let responseDict = responseObject as NSDictionary!
      
                  },
                  failure: { (operation: AFHTTPRequestOperation!,
                      error: NSError!) in
                      //Handle Error
                  })
          }
      复制代码

      实例

      最后,我写了一个简单的例子来通过调用金山词霸的API获取单词swift的解释。项目使用SwiftHTTP来作网络请求,使用SwiftyJSON来解析JSON数据,代码托管在Github,核心代码如下:

      复制代码
      //请求金山词霸API获取单词`swift`的解释
              var request = HTTPTask()
              var params: Dictionary<String, AnyObject> = ["w": "swift", "key": "30CBA9DDD34B16DB669A9B214C941F14", "type": "json"]
              request.GET("http://dict-co.iciba.com/api/dictionary.php", parameters: params, success: {(response: AnyObject?) -> Void in
      
                      let json = JSONValue(response!)
                      println("(json)")
      
                  },failure: {(error: NSError) -> Void in
      
                      println("(error)")
                  })
      复制代码

      from:http://swiftist.org/topics/135

  • 相关阅读:
    第三话-单一职责原则
    2014辽宁省赛 Repeat Number
    【iOS】Swift字符串截取方法的改进
    Android中特殊图形的生成样例
    Tiny server:小型Web服务器
    C语言复合字面量的使用
    浅析数据库连接池(一)
    答复学习汇编不顺利的准大学生
    Struts2拦截器
    7.数据本地化CCString,CCArray,CCDictionary,tinyxml2,写入UserDefault.xml文件,操作xml,解析xml
  • 原文地址:https://www.cnblogs.com/cmblogs/p/4549067.html
Copyright © 2020-2023  润新知