Это код, у меня есть:Дождитесь завершения этого обработчика, чтобы завершить выполнение, прежде чем функция возвращает значение
func authenticateCredentials(usernameString: String, passwordString: String) ->() -> Bool {
func isAuthUser() -> Bool {
client.invokeAPI("AuthenticateAndFetchData",
body: nil,
httpMethod: "GET",
parameters: ["userid": usernameString,"password":passwordString],
headers: nil)
{
(result, response, error) -> Void in
if let err = error {
print("ERROR ", err)
} else if let res = result {
let jsonArray = res as! NSArray
for value in jsonArray[0] as! NSDictionary {
let jsonstring = value.value as! String
NetworkService.jsonResponse = jsonstring
if let data = jsonstring.data(using: .utf8) {
if let content = try? JSONSerialization.jsonObject(with: data, options: []),
let array = content as? [[String: Any]]
{
for jsondict in array {
let auth = jsondict["IsAuth"]! as! String
self.isAuth = (auth == "true") ? true : false
let substring = NetworkService.parseJSONString(jsonString: jsonstring, key: "Activities")
let substring2 = NetworkService.parseJSONString(jsonString: substring(), key: "activityname")
let activityString = NetworkService.parseJSONvalue(jsonString:substring())
}
}
}
}
}
}
return self.isAuth
}
return isAuthUser
}
}
Я называю эту функцию на кнопку входа. Но когда я нажимаю кнопку в первый раз с правильными учетными данными, эта функция возвращает false
, когда я нажимаю снова, затем выполнял обработчик завершения, он меняет isAuth
на true и функция возвращает true.
Итак, я должен нажать кнопку дважды, чтобы выполнить аутентификацию. Как я могу заставить его возвращать true только в первый раз. Я хочу дождаться выполнения блока завершения до возвращения функции.
Вместо того, чтобы возвращать true или false из вашей функции. назовите его Async и поместите свой код в обработчик завершения –
Спасибо за ответ. Я новичок в быстроте. Не могли бы вы помочь мне, как я могу назвать функцию async. –