下面的函数只返回false,可能是因为 user.singUpInBackgroundWithBlock 在后台发生。
无论如何我能从函数中获得预期的返回值吗?
var returnFlag:Bool = false
func signUpAction(email:String, password:String) -> Bool
{
let user = PFUser()
user.username = email
user.password = password
user.signUpInBackgroundWithBlock {
(succeeded: Bool, error: NSError?) -> Void in
if let error = error {
let errorString = error.userInfo["error"] as? NSString
print(errorString!)
// INTENDED RETURN
self.returnFlag = false
} else {
// INTENDED RETURN
self.returnFlag = true
}
}
return self.returnFlag
}
答案 0 :(得分:0)
你是对的,该函数将返回false,因为可能没有在主线程上调用该块。
这是使用NSNotification的理想方案。不要传递返回值,而是在登录操作完成后发布通知。
示例代码:
在视图控制器生命周期的早期某个地方,最好是viewdidload。将您的类注册到观察者以获取登录成功和登录失败通知。
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("LoginFailedFunc:"), name: "loginFailed", object: nil)
NSNotificationCenter.defaultCenter()。addObserver(self,selector:Selector(" loginSuccessFunc:"),name:" loginSuccess",object:nil)
在登录功能中,根据有效或无效登录信息发布通知。
func signUpAction(email:String, password:String){
let user = PFUser()
user.username = email
user.password = password
user.signUpInBackgroundWithBlock {
(succeeded: Bool, error: NSError?) -> Void in
if let error = error {
let errorString = error.userInfo["error"] as? NSString
print(errorString!)
// INTENDED RETURN
NSNotificationCenter.defaultCenter().postNotificationName("loginFailed", object: self)
self.returnFlag = false
} else {
NSNotificationCenter.defaultCenter().postNotificationName("loginSuccess", object: self)
self.returnFlag = true
}
}
}
最后记得在不再需要时停止观察通知。