异步完成处理程序/无法设置数据值

问题描述

我一直在尝试设置数据,但正如我所看到和搜索的,我的问题是关于完成处理程序的异步线程 (?)。由于它延迟返回值,我无法设置我的值。当我打电话给他们时,他们都变成了零。

这是我要在其中进行身份验证的按钮:

@IBAction func signInButton(_ sender: UIButton) {
    
    login.email = emailOutlet.text!
    login.password = passwordOutlet.text!
    //Thread.sleep(forTimeInterval: 2)
    
    if login.doAuth() {
        performSegue(withIdentifier: "Identifier",sender: self)
    } else {
        print("Either your password or your email is wrong.")
    }
    
    self.view.endEditing(true)
}

这是课堂:

class Login {

    var email = ""
    var password = ""
  
    var isTrue = false

    func doAuth() -> Bool {
        Services.login(email: email,pass: password) { (userModal) in
            if userModal?.email! != nil {
                self.isTrue = true
            } else {
                self.isTrue = false
            }
        }
       
        return isTrue
    }
}

这是完成处理程序:

class func login(
    email: String,pass: String,_ complation: @escaping (_ user: User?) -> Void
) {
    let params = [
        "command" : "login","email" : email,"password" : pass
    ]
    
    Services().postRequest(
        parameters: params,codableProtocol: User.self,isMemberFunction: true
    ) { (response) in
        let r = (response as? ServiceResponse<User>)?.data
        complation(r)
    }
}

因此,由于我正在尝试进行身份验证,因此当我单击按钮时,它应该授权并返回 true 或 false。但是我无法处理时间延迟,因此第一次单击按钮不会使我返回 true(当然,当我输入正确的凭据时)。我必须单击两次才能获得延迟数据。我可以做些什么来解决这个问题,因为我使用来自 PHP 端的数据和 JSON?我必须使用大部分数据,但延迟并不能帮助我实现。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)