这是我下面的swift代码。默认情况下,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开始。因此,任何指针都是有用的。
您的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并向用户提供反馈。