5

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 を返すにはどうすればよいですか?

4

1 に答える 1

9

作成したコードに基づいて、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 for を取得していることを意味します。

ところで、あなたは本当にする必要がありますerror == nil

于 2014-12-03T07:11:29.910 に答える