Swfit网络请求

一个简单的网络请求,收集api封装了请求。

//
//  Request.swift
//  Walnut
//
//  Created by Carlton on 15/7/28.
//  Copyright (c) 2015年 wnutwork. All rights reserved.
//

import Foundation
class NetworkRequest
{
    /**
    通过String参数请求服务器
    
    - parameter method:            请求方式
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    private func requestString(method: RequestMothod, var url: String, params: NSDictionary, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        var requestData=NSData()
        if(method == RequestMothod.GET)
        {
            url += "?"
            for(key, value) in params
            {
                url += "\(key)=\(value)&"
            }
            url = url.substringToIndex(url.length - 1)
        }
        else
        {
            let postData=NSMutableData()
            for (key, value) in params
            {
                postData.appendData("&\(key)=\(value)".dataUsingEncoding(NSUTF8StringEncoding)!)
            }
            requestData = postData
        }
        request(method, url: url, httpBody: requestData, completionHandler: completionHandler)
    }
    /**
    通过get方式,参数是String请求服务器
    
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    func requestString(url: String, params: NSDictionary, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        requestString(RequestMothod.GET, url: url, params: params, completionHandler: completionHandler)
    }
    /**
    通过post方式,参数是String请求服务器
    
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    func postString(url: String, params: NSDictionary, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        requestString(RequestMothod.POST, url: url, params: params, completionHandler: completionHandler)
    }
    /**
    通过Json参数请求服务器
    
    - parameter method:            请求方式
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    private func requestJson(method: RequestMothod, url: String, params: NSDictionary, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        do
        {
            let jsonData = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions())
            request(method, url: url, httpBody: jsonData, completionHandler: completionHandler)
        } catch let error as NSError {
            NSErrorPointer().memory = error
        }
    }
    /**
    通过get方式,参数是Json请求服务器(暂不可用)
    
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    private func requestJson(url: String, params: NSDictionary, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        requestJson(RequestMothod.GET, url: url, params: params, completionHandler: completionHandler)
    }
    /**
    通过post方式,参数是Json请求服务器
    
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    func postJson(url: String, params: NSDictionary, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        requestJson(RequestMothod.POST, url: url, params: params, completionHandler: completionHandler)
    }
    /**
    通过NSData参数请求服务器
    
    - parameter method:            请求方式
    - parameter url:               url
    - parameter params:            请求参数
    - parameter completionHandler: 请求回调
    */
    func request(method: RequestMothod, url: String, httpBody: NSData, completionHandler:  ( NSData!,NSURLResponse!, NSError!) -> Void)
    {
        let req = NSMutableURLRequest()
        req.HTTPMethod = getRequestMothod(method)
        req.HTTPBody = httpBody
        if let url = NSURL(string:url)
        {
            req.URL = url
            Log.d("【网络请求】",msg: "\n【\(req.HTTPMethod)】:\(String.valueOf(req.URL?.description))\n【Params】:\(String.valueOf(NSString(data: req.HTTPBody!, encoding:NSUTF8StringEncoding)))")
            
            let session = NSURLSession.sharedSession()
            let dataTask = session.dataTaskWithRequest(req, completionHandler: { (data, response, error) -> Void in
                if (error != nil) {
                    Log.d("【网络响应】",msg: "\n【URL】:\(String.valueOf(req.URL?.description))\n【INFO】:\(error)")
                    dispatch_async(dispatch_get_main_queue())
                    {
                        completionHandler(data, response, error)
                    }
                } else {
                    let info = String.valueOf(NSString(data:data!, encoding: NSUTF8StringEncoding))
                    Log.d("【网络响应】",msg: "\n【URL】:\(String.valueOf(req.URL?.description))\n【INFO】:\(info.unicodeString)")
                    dispatch_async(dispatch_get_main_queue())
                    {
                        completionHandler(data, response, error)
                    }
                }
            })
            dataTask.resume()
        }
        else
        {
            Log.d("【网络响应】", msg: "\n【\(req.HTTPMethod)】:\(String.valueOf(req.URL?.description))   Url地址不合法")
        }
    }
    /**
    返回请求方法的类型
    **/
    private func getRequestMothod(mothod:RequestMothod) ->String
    {
        var mod = "GET"
        switch(mothod)
        {
        case RequestMothod.GET:
            mod = "GET"
            break
        case RequestMothod.POST:
            mod = "POST"
            break
        }
        return mod
    }
}

打印日志的类没有直接给出来,可以删掉。

发表评论

电子邮件地址不会被公开。 必填项已用*标注