没有在bool函数中获取/设置正确的返回值

时间:2014-10-23 02:20:50

标签: ios ios7 swift ios8

这是我下面的快速代码。默认情况下,success变量设置为false。从它的外观来看,success变量永远不会在对象内部得到更新。因此返回值始终为false。关于如何解决这个问题的任何提示?

更新:我添加了println以查看逻辑是否正常运行。

class Auth {
    func authUser(email: String, password: String) {
        var success : Bool = false
        let parameters = [
            "user1": [
                "adminEmail": email,
                "adminPassword": password
            ]
        ]
        var defaults = NSUserDefaults.standardUserDefaults()
        Alamofire.request(.POST, loginURL, parameters: parameters).responseJSON { (_, _, object, error) -> Void in
            if(object != nil) {
                if(JSON(object!)["success"].asBool == true) {
                   println("user signed in")
                   self.authSuccess()
                }
            }
        }

    }

func authSuccess() -> Bool {
    self.success = true
    println(success) // this does not get printed out.
    return success
}
}

ViewController.swift

@IBAction func signInButtonPressed(sender: AnyObject) {
    var auth = Auth()
    auth.authUser(emailTxtField.text, password: pwdTxtField.text)
    println(auth.success)
}

刚开始使用swift。所以任何指针都有帮助。

1 个答案:

答案 0 :(得分:2)

您的Alamofire请求异步完成 - 请求完成后执行关闭,但此时authUser方法已返回,值为false

authUser无法返回成功/失败 - 您需要从闭包中调用另一个方法来处理成功/失败

您不需要检查auth标志以更新标签(尽管您可能希望在应用中的其他位置使用该属性,这很好)。调用authSuccess时,您只需更新标签即可。您需要将更新分派给主队列上的UI元素 - 您的authSuccess将在后台线程上执行,因此请使用

func authSuccess()  {
    self.success = true
    dispatch_async(dispatch_get_main_queue()) { 
        self.myLabel="Authenticaton successful"
    }

}

您还应该处理闭包中的其他条件并调用authFail或其他内容(如果失败)以更新UI并向用户提供反馈。