Blog

  •  

    What are Closures?

     

    Closures are enclosed in curly braces {} without func keyword and func name. They are defined by function type ()-> ()

    { (params) -> returnType in
      statements
    }
    

    in keyword separates closure header with its body.

     

     

    Function VS Closures

     

    Function

    Closures

    has no in keyword

    has in keyword

    has a name

    has no name

    has func keyword

    has no func keyword

     

    Define and Call

     

    That’s how we define function and closures:

    func callAFunc() { }
    
    var callAClosure = { () -> () in }
    

     

    Closure is been stored in a variable so that it can be called when required.

     

    Calling functions and closures:

    callAFunc()
    
    callAClosure()
     

     

    Both are identical.

     

    Function to Closure

     

    Let’s convert the below function to closure.

    func multiplyNumbers(a: CGFloat, b: CGFloat) -> String {
    	return “Result is: \(a * b)”
    }
    

     

    Steps:

     

    • Removing curly braces
    func multiplyNumbers(a: CGFloat, b: CGFloat)  -> String 
    	return “Result is: \(a * b)”
     
    
    • Add in keyword between argument and body

    func multiplyNumbers(a: CGFloat, b: CGFloat)  -> String in
    	return “Result is: \(a * b)”
    
    • Removing func name and keyword

    (a: CGFloat, b: CGFloat)  -> String in
    	return “Result is: \(a * b)”
     
    
    • Put all in curly braces

    { (a: CGFloat, b: CGFloat)  -> String in
    	return “Result is: \(a * b)”
         }
    

     

    It’s done. Now we can assign this closure to a variable and call it whenever required.

     
    var multiply = { (a: CGFloat, b: CGFloat)  -> String in
    	return “Result is: \(a * b)”
    }
    
    multiply(126.43,256.566)
    
    

    Thanks 

Tags: swift