我是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()
}
我认为问题是在请求结束时发生的,包括编码,但我只想包含所有细节。
答案 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 {
}
}