天天看點

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)
    }