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