Alp*_*ven 3 boolean objective-c-blocks swift completion
我正在尝试使用Swift编写的Parse.我能够毫无困难地登录,但我正在努力告诉我的应用程序用户已登录.
我正在使用logInWithUsernameInBackground,如果登录成功,我只想返回一个布尔值.
我用的时候:
func authenticateUser() -> Bool{
PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
(user,error) in
return error === nil
})
}
Run Code Online (Sandbox Code Playgroud)
我得到错误"Bool不能转换为Void"这是有道理的.
所以,如果我将第3行更改为:
(user,error) -> Bool in
Run Code Online (Sandbox Code Playgroud)
我最终得到错误"在调用中缺少参数选择器的参数"
但是,此方法不需要选择器参数.
那我哪里错了?如何根据登录时是否有错误返回bool?
根据您编写的代码,如果您想返回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
}
Run Code Online (Sandbox Code Playgroud)
但是,根据您的代码,您想要做的是:
func authenticateUser(completion:(Bool) -> ()) {
PFUser.logInWithUsernameInBackground(userName.text, password: passwordField.text, block: {
(user,error) in
completion(error === nil)
})
}
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式之一调用该呼叫:
authenticateUser(){
result in
if result {
println("Authenticated")
} else {
println("Not authenticated")
}
}
Run Code Online (Sandbox Code Playgroud)
要么
authenticateUser({
result in
if result {
println("Authenticated")
} else {
println("Not authenticated")
}
})
Run Code Online (Sandbox Code Playgroud)
第一个是速记,当你在关闭之前有其他参数时更方便.
这意味着您将收回Bool,以确定您是否异步验证.
顺便说一下,你真的只需要做 error == nil
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |