it-swarm.com.ru

Выполнять POST запрос в Swift

Я пытаюсь сделать что-то вроде этого:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];

request.HTTPMethod = @"POST";

NSString *stringData = @"some data";
NSData *requestBodyData = [stringData dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = requestBodyData;

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

Это то, что я до сих пор:

var url = NSURL(string: "some url")
var request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST"

var dataString = "some data"
var requestBodyData: NSData = dataString.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) as NSData

request.HTTPBody = requestBodyData

var connection = NSURLConnection(request: request, delegate: self, startImmediately: false)

println("sending request...")

connection.start()

Тем не менее, var requestBodyData: line бросает первый камень со словами «Невозможно преобразовать тип NSData выражения в тип NSData»

Кто-нибудь хочет взвесить?

16
Jake Johnson

stringByAddingPercentEscapesUsingEncoding возвращает строку вместо объекта NSData. Согласно this answer, вам нужно использовать это для преобразования в экземпляр NSData:

let data = (anySwiftString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
10
wvteijlingen

Использование Alamofire для отправки HTTP POST запроса

let request = NSMutableURLRequest(URL: NSURL(string: "https://www.google.com")!)
request.HTTPMethod = "POST"

let body = "email=\(email)&access_token=\(token)"
request.HTTPBody = body.dataUsingEncoding(NSUTF8StringEncoding)

Alamofire.request(request).responseJSON { response in

        NSLog("response.request: \(response.request)")  // original URL request
        NSLog("esponse.response: \(response.response)") // URL response

        switch response.result {
        case .Success:
            NSLog("Validation Successful")
        case .Failure(let error):
            // Logout
            NSLog("\(error), \(String(data: response.data!, encoding: NSUTF8StringEncoding))")
            return
        }

        // Save sip account information to NSUserdefaults
        if let json = response.result.value as? [String: AnyObject]{
            // Do your stuff
        } 
}
1
Cody