在swift中返回回调

时间:2014-11-27 00:32:38

标签: ios swift

我有一个回调作为此函数的一个参数,callback(false)Type 'Void' does not conform to protocol 'BooleanLiteralConvertible'。为什么?我的回调应该返回Bool,这肯定是

func facebookLoginWithCallback(callback: ((Void) -> (Bool))) -> Void {
    let permissions = ["public_profile", "email", "user_friends"]
    PFFacebookUtils.logInWithPermissions(permissions, block: {(user: PFUser?, error: NSError?) -> (Void) in
        if (user == nil) {
            println(error)
            callback(false)
        } else if ((user?.isNew) == true) {

        }
    })
}

2 个答案:

答案 0 :(得分:2)

是的,你的回调确实会返回Bool,但不需要任何参数(例如Void)。

您使用参数false调用它,该参数无法转换为Void,因此会显示错误消息。

您可以将回调类型更改为Bool -> Void,因此需要Bool并且不会返回值。

答案 1 :(得分:1)

如果您只想返回bool值,请使用以下代码

    func facebookLoginWithCallback(callback: (Bool) -> Void) {
    let permissions = ["public_profile", "email", "user_friends"]
    PFFacebookUtils.logInWithPermissions(permissions, block: {(user: PFUser?, error: NSError?) -> (Void) in
        if (user == nil) {
            println(error)
            callback(false)
        } else if ((user?.isNew) == true) {

        }
    })
}