天天看点

swift2.0 异步post请求

swift语言实现异步网络post请求,用NSDictionary封装post表单。

class func post(urlString urlString: String?,postParams: NSDictionary!,completion: (data: NSString?) -> Void){
        if urlString == nil {
            dispatch_async(dispatch_get_main_queue(), { () -> Void in
                print("urlString 为空")
                completion(data: nil)
            })
        }
        
        let url = NSURL(string: urlString!)//post的url地址
        let request = NSMutableURLRequest(URL: url!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10)
        request.HTTPMethod = "POST"
        parseParams(Params: postParams, completion: {(result) in
            let postData: NSData = (result?.dataUsingEncoding(NSUTF8StringEncoding))!
            request.HTTPBody = postData//post表单
        })
        let queue = NSOperationQueue()
        NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler: {
            (response,data,error) -> Void in
            let httpResponse = response as? NSHTTPURLResponse
            if httpResponse?.statusCode == 200{
                let parseData = NSString(data: data!, encoding: NSUTF8StringEncoding)//self.parseJSONData(data)
                dispatch_async(dispatch_get_main_queue(),{
                    () -> Void in
                    completion(data: parseData)
                })
            }else {
                dispatch_async(dispatch_get_main_queue(), {
                    () -> Void in
                    print(error)
                    completion(data: nil)
                })
            }
        })
    }
           

当然在post之前还要将传过来的NSDictionary转化为post的固定格式

class func parseParams(Params Params: NSDictionary!,completion: (paramString: NSString?) -> Void){
        var keyValueFormat: String?
        let result = NSMutableString()
        let keyEnum = Params.keyEnumerator()
        while let key = keyEnum.nextObject() as? String{
            keyValueFormat = String.init(format: "%@=%@&", arguments: [key,(Params.valueForKey(key)?.description)!])//post的键值对
            result.appendString(keyValueFormat!)
        }
        completion(paramString: result)
    }