Я пытаюсь подтвердить логин пользователя в моей базе данных. Когда кнопка входа в систему нажата, я хочу сказать, произойдет ли переход или нет, основываясь на информации, возвращенной из базы данных. Сначала я принимаю переменное решение, равное true, и если я не могу подтвердить пользователя, я хочу установить значение false и предотвратить переход. Это код, который у меня есть, но есть проблема с ним. Оператор return в конце всегда верен. В основном происходит возврат в конце после того, как .resume () будет вызван первым, прежде чем ответ будет возвращен из базы данных. Может кто-нибудь уточнить, почему это происходит
override func shouldPerformSegue(withIdentifier identifier: String,sender:
Any?) -> Bool
{
var decision = true
let url = URL(string:"http://192.23.25.98/login/php")
var request = URLRequest(url: url!)
request.httpMethod = "POST"
let body = "UserNameLogIn=\(userName.text!.lowercased())&PasswordLogIn=\(passWord.text!.lowercased())"
request.httpBody=body.data(using: String.Encoding.utf8)
URLSession.shared.dataTask(with: request) { (data:Data?, response:URLResponse?, error:Error?) in
if (error == nil)
{
DispatchQueue.main.async(execute: {
do
{
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? Dictionary<AnyHashable,AnyObject>
guard let parseJson = json else{
print ("error parsing")
return
}
let status = parseJson["status"]
if (status != nil)
{
if (parseJson.count>3)
{
decision = true
}
else
{
decision = false
}
}
}
catch
{
print("error: \(error)")
}
})
}
else
{
decision = false
}
}.resume()
return decision
}