2014-11-27 4 views
0

У меня есть обратный вызов как один из параметров этой функции, на линии callback(false) это Type 'Void' does not conform to protocol 'BooleanLiteralConvertible'. Зачем? Мой обратный вызов должен возвращать Bool, который, безусловно, является ложнымreturn callback in swift

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) { 

     } 
    }) 
} 
+0

«CallBack» не принимает никаких параметров, вы передаете в булевой «обратного вызова (ложь)». Это ошибка. – gagarwal

ответ

1

Если вы просто хотите, чтобы вернуть булево значение, то используйте следующий код

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) { 

     } 
    }) 
} 
2

Да, ваш обратный вызов делает возвращать Bool, но она не принимает никаких аргументов (т.е. Void).

Вы вызываете его с аргументом false, который не может быть преобразован в Void, следовательно, сообщение об ошибке.

Вы можете изменить тип обратного вызова на Bool -> Void, поэтому он принимает значение Bool и не возвращает значение.