gpt4 book ai didi

xcode - 使用后台代码从 swift 函数返回值

转载 作者:行者123 更新时间:2023-11-30 13:53:26 24 4
gpt4 key购买 nike

下面的函数仅返回 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
}

最佳答案

你是对的,该函数将返回 false,因为该 block 可能没有在主线程上调用。

这是使用 NSNotification 的理想场景。不要传递返回值,而是在登录操作完成后发布通知。

示例代码:

在 View Controller 生命周期的早期,最好是viewdidload。将您的类注册到观察者以获取登录成功和登录失败通知。

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("LoginFailedFunc:"), name: "loginFailed", object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, 选择器: 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
}
}
}

最后记得在不再需要时停止观察通知。

关于xcode - 使用后台代码从 swift 函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33968329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com