У меня есть простой метод входа, который возвращает bool, зависит от успеха входа пользователя в систему. У меня проблема с порядком ответов и выполнением кода. Я читал о обработчиках завершения, которые, я думаю, являются решением моей проблемы, но я не уверен. Вот мой метод:Обработчик завершения с запросом POST
//perform user login in, setting nsuserdefaults and returning the bool result
func login(username: String, password:String) -> (Bool) {
var success:Bool = false
//sending inputs to server and receiving info from server
let postRequest = postDataToURL()
postRequest.link = "http://pnc.hr/rfid/login.php"
postRequest.postVariables = "username=" + username + "&password=" + pass
word
postRequest.forData("POST") { jsonString in
// getting the result from the asinhronys task
let result = convertStringToDictionary(jsonString as String)
if let loggedIn = result?["loggedIn"] as? Bool where loggedIn == true {
let userType = result?["userType"] as? String
let token = result?["token"] as? String
//if user is logged - setting parameters in Key Chains and redirecting them to the menu view
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(loggedIn, forKey: "loggedIn")
defaults.setObject(username, forKey: "username")
defaults.setObject(userType, forKey: "userType")
defaults.setObject(token, forKey: "token")
success = true
}
else {
success = false
}
print ("class - " + String(jsonString))
print ("classIN - " + String(success))
}
print ("classOUT - " + String(success))
return success
}
Я хотел бы сделать возвращение переменного успеха внутри, если оператор, который проверяет переменную LoggedIn равно верно. Но в этом случае я получаю ошибку.
Тогда я сделал этот метод. Проблема в том, что метод возвращает переменную успех быстрее, чем запрос POST. Поэтому в каждом случае это будет ложным. Я печатал переменные, чтобы увидеть порядок выполнения кода, и метод сначала печатает «classOUT», возвращает переменную, а затем устанавливает значение переменной и печатает «classIN».
Как я могу подождать, пока код, который регистрирует пользователя, будет выполнен, поэтому я могу получить правильное значение успеха переменной?
Это один чаще всего отвечал и задавал вопрос о iOS на Переполнение стека. Пожалуйста, прежде чем спрашивать, пожалуйста, Поиск на таких терминах, как «асинхронный». Вы не можете «вернуть» все, что зависит от асинхронной функции, потому что функция выполняется после того, как вы вернулись. – matt