Mani Mani - 6 months ago 37
Swift Question

swift : Closure declaration as like block declaration

We can declare block as below in Objective-C.

typedef void (^CompletionBlock) (NSString* completionReason);


I'm trying to do this in swift, it give error.

func completionFunction(NSString* completionReason){ }
typealias CompletionBlock = completionFunction



Error : Use of undeclared 'completionFunction'


Definition :

var completion: CompletionBlock = { }


How to do this?

Update:

According to @jtbandes's answer, I can create closure with multiple arguments as like

typealias CompletionBlock = ( completionName : NSString, flag : Int) -> ()

Answer

The syntax for function types is (in) -> out.

typealias CompletionBlock = (NSString?) -> Void
// or
typealias CompletionBlock = (result: NSData?, error: NSError?) -> Void
var completion: CompletionBlock = { reason in print(reason) }
var completion: CompletionBlock = { result, error in print(error) }

(Note that the parentheses around the input type are only required as of Swift 3+.)