我正在尝试使用Swift编写的Parse。我能够毫无困难地登录,但我正在努力告诉我的应用程序用户已登录。
我正在使用 logInWithUsernameInBackground ,如果登录成功,我只想返回一个布尔值。
当我使用时:
func authenticateUser() -> Bool{
PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
(user,error) in
return error === nil
})
}
我得到错误“Bool不能转换为Void”这是有道理的。
因此,如果我将第3行更改为:
(user,error) -> Bool in
我最终得到错误“在调用中缺少参数选择器的参数”
但是,此方法不需要选择器参数。
那我哪里错了?如何根据登录时是否有错误返回bool?
答案 0 :(得分:6)
根据您编写的代码,如果您想返回Bool,您可以这样做:
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")
}
})
第一个是速记,在关闭之前有其他参数时更方便。
这意味着您将收回您的Bool,以确定您是否异步验证。
顺便说一下,你真的只需要做error == nil