Error: Bool is not Convertible to Void:

3 Solutions Collect From Internet About “Error: Bool is not Convertible to Void:”

Your block does not have a return statement, therefore the compiler
uses the result of the last statement


as return value, which is a Bool and not Void as declared in the block signature.

To solve that problem, just add a return statement:

{ (url: NSURL, oauthToken: String) -> Void in

The problem is that openURL returns a boolean, and an attempt to convert it to Void is made, since the closure is declared as returning a Void. Simply remove that as follows:

{ (url: NSURL, token: String)  in

If you don’t want to change the closure signature, just assign the return value to a variable:

{ (url: NSURL, token: String) -> Void in
    let ret = UIApplication.sharedApplication().openURL(url)

What’s not stated in the other answers is that Swift will implicitly add a return to a single statement closure.

This is how statements like conditionSet.sort {$0.set < $1.set} can work.

This can also result in an unexpected error. To avoid the error, make the closure have 2 statements. The simplest way is to add a return after your original statement as stated in the accepted answer.