В моем приложении swift есть класс api manager, и у него есть логин на сервере с именем пользователя и паролем.
Я хочу знать, как создать обработчик завершения для него, чтобы, когда сервер отвечает 200 кодом состояния, функция обрабатывает этот ответ и, например, выполняет переход в viewcontroller.
Я не нашел никаких учебных пособий для этого. Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ 1:
Что мне нужно, это: обработчик завершения сразу запускается при вызове функции. Я хочу запустить обработчик завершения после ответа сервера.
И это моя функция входа в систему:
public class func Login(username: String, password: String, complitionHandler: @escaping (Int) -> Void) {
let urlS = "http://server.com/" + "login.php"
let url = URL(string: urlS)
var request = URLRequest(url: url!)
request.httpMethod = "POST"
let body = "username=\(username.lowercased())&password=\(password)"
request.httpBody = body.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data, error == nil else {
print(error!)
print("error")
logedIn = 2
return
}
do{
let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? NSDictionary
if let parseJson = json {
let code = parseJson["status"] as! String
if code == "200" {
print("loged inn")
logedIn = 1
}else if code == "400" {
print("uuuser/pass error")
logedIn = 0
}
}
}catch{
print("json error")
logedIn = 2
}
}
task.resume()
DispatchQueue.main.async {
complitionHandler(logedIn)
}
}
И как я вызываю функцию в моем ViewController:
Manager.Login(username: "1", password: "1") { (i) in
switch i {
case 0:
print("user/pass error")
case 1:
print("loged in")
self.performSegue(withIdentifier: "toMain", sender: self)
case 2:
print("json error")
default:
()
}
}