【问题标题】:Converting Objective-C POST Request to Swift将 Objective-C POST 请求转换为 Swift
【发布时间】:2016-03-30 10:39:43
【问题描述】:

我是 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() 
}

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

【问题讨论】:

    标签: objective-c json swift post server


    【解决方案1】:

    你为什么不使用 Alamofire。它默认处理 json。我们不必关心它。只需将库集成到您的项目中即可。以下是这样做的说明:github.com/Alamofire/Alamofire

    使用“import Alamofire”将库导入您的班级。然后使用以下代码:

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

    【讨论】:

    • 谢谢,但这不起作用。它返回与我自己的请求相同的错误。这是响应:{状态代码:500,标题{“Content-Type”=“text/html”;日期 =“格林威治标准时间 2016 年 3 月 30 日星期三 20:18:10”;服务器=本地主机; “传输编码” = 身份; } })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多