Es ist allgemein bekannt, dass eine asynchrone Postanforderung besser ist, da der Benutzer keine Vorstellung davon bekommt, dass die App "abgestürzt" ist, während sie den langen Prozess lädt.Wie kann ich eine synchrone Postanforderung in eine asynchrone Postanforderung konvertieren?
Ich bin mir jedoch nicht sicher, wo ich anfangen soll, eine synchrone Postanforderung in eine asynchrone Postanforderung für einen Swift-Code zu konvertieren.
Ich habe diesen Code zur Zeit:
func checkLogin() {
let username:NSString = txtUsername.text! as NSString
let password:NSString = txtPassword.text! as NSString
do {
let post:NSString = "username=\(username)&password=\(password)" as NSString
NSLog("PostData: %@",post);
let url:URL = URL(string:"https://example.com/login.php")!
let postData:Data = post.data(using: String.Encoding.ascii.rawValue)!
let postLength:NSString = String(postData.count) as NSString
let request:NSMutableURLRequest = NSMutableURLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = postData
request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
var reponseError: NSError?
var response: URLResponse?
var urlData: Data?
do {
urlData = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning:&response)
} catch let error as NSError {
reponseError = error
urlData = nil
}
if (urlData != nil) {
let res = response as! HTTPURLResponse!;
NSLog("Response code: %ld", res?.statusCode);
if ((res?.statusCode)! >= 200 && (res?.statusCode)! < 300) {
let responseData:NSString = NSString(data:urlData!, encoding:String.Encoding.utf8.rawValue)!
NSLog("Response ==> %@", responseData);
let jsonData:NSDictionary = try JSONSerialization.jsonObject(with: urlData!, options:JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
let success:NSInteger = jsonData.value(forKey: "success") as! NSInteger
NSLog("Success: %ld", success);
if(success == 1)
{
// do something, code removed
} else {
var error_msg:NSString
if jsonData["error_message"] as? NSString != nil {
error_msg = jsonData["error_message"] as! NSString
} else {
error_msg = "Unknown Error"
}
// show alert
}
}
}
}
}
Vielen Dank für Ihre Antwort! Ich bin mir nicht sicher, wie ich meine Post-Werte übermitteln kann und wie ich den empfangenen JSON parsen kann. – Panda
@Panda Ihre Anfrage wird gleich sein, auch Sie haben JSON Parsing gut gemacht. Es gibt nur wenige Änderungen, die Sie vornehmen müssen, um in Swift 3 zu verwenden. Sie können das problemlos tun. Tauchen Sie einfach in dieses erste ein. Glückliche Kodierung .. !! –