你的网络呼叫是
异步
,这意味着它可以在未来的任何时候完成。异步调用只是开始运行并立即返回,调用一个完成块(在您的情况下,使用
success
areFieldsValid()
不正确,因为它期望返回异步调用的结果(立即返回)。你的验证函数应该有一个完成闭包来处理一些东西,比如:
func validateFields(completion: @escaping (Bool) -> Void) {
checkUsername(field: usernameTextField.text!) { success in
if success {
// username is taken
print("Username is taken")
self.setupUsernameTextField()
self.checkUsernameImage.image = UIImage(named: "false")
self.checkUserNameLabel.text = "Benutzername ist bereits vergeben"
self.isValid = false
}
completion(success) // call the completion closure with the success status
}
}
所以你可以这样称呼它:
@objc func signUpButtonTapped(_ sender: Any) {
validateFields { areValid in
if areValid {
self.theScrollView.scrollToTop()
} else {
// create user
}
}
}