在Swift中从Block返回布尔值
我正在尝试使用用Swift编写的Parse。我能登录,没有任何麻烦,但我有告诉我的应用程序,用户登录挣扎。在Swift中从Block返回布尔值
我使用logInWithUsernameInBackground,我只是想,如果在日志中成功返回一个布尔值。
当我使用:
func authenticateUser() -> Bool{
PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
(user,error) in
return error === nil
})
}
我得到的错误“布尔不可*兑换作废”,这是有道理的。
所以,如果我改变线3阅读:
(user,error) -> Bool in
我结束了错误“在呼吁参数选择缺少参数”
然而,这种方法不需要选择参数。
那么我哪里错了?如何根据登录时是否有错误返回一个布尔值?
基于代码为你写的,如果你想返回布尔,你可以这样做:
func authenticateUser() -> Bool{
PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
(user,error) in
return error === nil
})
return true // This is where the bool is returned
}
但是,你想要做的,根据你的代码是什么,就是:
func authenticateUser(completion:(Bool) ->()) {
PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
(user,error) in
completion(error === nil)
})
}
您可以通过下面的一个调用电话:
authenticateUser(){
result in
if result {
println("Authenticated")
} else {
println("Not authenticated")
}
}
或
authenticateUser({
result in
if result {
println("Authenticated")
} else {
println("Not authenticated")
}
})
第一个是速记,在关闭之前有其他参数时更方便。
这意味着您正在取回您的布尔是否异步验证身份。
顺便说一句,你真的只需要做error == nil
这正是我想要的。有一件事,我怎么称呼它?我通过了哪个参数? ... 如果self.authenticateUser(){//用于参数的#1,电话... 还缺少参数: 我知道这是哪里回报会去,但将永远是真的,是不是我希望非常感谢您使用更新后的代码对其进行更正... ===是为了使错误消失 – ArchonLight 2014-12-04 03:17:14
我刚刚更新了答案,让代码调用它。 – 2014-12-04 09:22:10
非常感谢! – ArchonLight 2014-12-04 14:08:59
在一个侧面说明,此代码工作完全正常: VAR错误:NSError? PFUser.logInWithUsername(userName.text,密码:passwordField.text,错误:错误) 如果(错误==无){ 还真 }其他{ 返回假 } 不过控制台有这样的警告: 警告:正在主线程上执行长时间运行的操作。 – ArchonLight 2014-12-03 05:51:03
你必须明白logInWithUsernameInBackground是一个* asynchronous *方法,并且你的authenticateUser方法在调用完成闭包之前返回*。 – 2014-12-03 06:15:13