将Objective-C POST请求转换为Swift

时间:2016-03-30 10:39:44

标签: objective-c json swift post server

我是Swift的新手并且不了解Objective C.我想将此函数完全转换为Swift。

void post_req()

    {
        NSString *oper = @"99";
        NSString *key = @"22";
NSString *query = @"22";
NSString *event_id = @"2";
NSError * error = nil;

NSString *myRequestString = [[NSString alloc] initWithFormat:@"operation=%@&key=%@&payload=%@", oper, key, query, event_id];
NSData *myRequestData = [ NSData dataWithBytes: [ myRequestString UTF8String ] length: [ myRequestString length ] ];
NSMutableURLRequest *request = [ [ NSMutableURLRequest alloc ] initWithURL: [ NSURL URLWithString:@"numbers"]];
[request setHTTPMethod: @"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody: myRequestData];
NSURLResponse *response;
NSError *err;
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse:&response error:&err];
NSString *content = [NSString stringWithUTF8String:[returnData bytes]];
NSError *e = nil;
NSData *jData = [content dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:jData options: NSJSONReadingMutableContainers error: &e];

id<NSObject> value = JSON[@"response"];

NSLog(@"responseData: %@", JSON);
NSLog(@"payData: %@", value);
NSString* responseString = [[NSString alloc] initWithData:returnData encoding:NSNonLossyASCIIStringEncoding];

if ([content isEqualToString:responseString])
{
    NSLog(@"responseData: %@", content);
}   

这是我到目前为止所拥有的。它没有正常运行。

func post_req() {

    let oper = "99"
    let key = "22"
    let query = "22"
    let event_id = "10"
    var error : NSError?

    let urlString = "http://numbers"
    let url = NSURL(string: urlString)!
    let request = NSMutableURLRequest(URL: url)
    var session = NSURLSession.sharedSession()
    request.HTTPMethod = "POST"

    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")

    var myRequestString = NSString(format: "operation=%@&key=%@&payload=%@", oper, key, query, event_id)
    var myRequestData = NSData(bytes: myRequestString.UTF8String, length: myRequestString.length)
    //request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "content-type")
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"content-type")
    request.HTTPBody = myRequestData

    let task = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in

        var content = String(data: data!, encoding: NSUTF8StringEncoding)!

        var jData = content.dataUsingEncoding(NSUTF8StringEncoding)

        do {

            let JSON = try NSJSONSerialization.JSONObjectWithData(jData!, options: .MutableContainers)


            print("responseData: %@", JSON)

        } catch {
            print("error")
        }
        print("responseData: %@", content)

    })
    task.resume() 
}

我认为问题是在请求结束时发生的,包括编码,但我只想包含所有细节。

1 个答案:

答案 0 :(得分:2)

为什么不使用Alamofire。它默认处理jSon。我们不需要关心它。只需将库集成到您的项目中即可。下面是指示:github.com/Alamofire/Alamofire

使用&#34;导入Alamofire&#34;将库导入您的类。然后使用以下代码:

let parameters = ["oper": "99" ,"key" : "22" , "query" : "22" , "event_id" : "2" , "error" : "" ]

Alamofire.request(.POST, "http://yoururl.com", parameters: parameters)
 .responseString { response in
     print("Response String: \(response.result.value)")
 }
 .responseJSON { response in
     print("Response JSON: \(response.result.value)")
   //Handle the json response here
  if let parseJSON = response.result.value {

        }
 }