Before we define a closure let’s recall the function definition from the Functions module. This will be helpful to reference while we step through the closure definition.

func functionName(parameters) -> ReturnType { // function tasks go here }

And here is how we define a closure:

{ (parameters) -> returnType in // closure tasks go here }

Notice any similarities between the definitions of a closure and a function? A closure kind of looks like a compressed function. The parameters and return types are inside the braces, and the in keyword separates them from the body. Let’s take a look at the closure definition in-depth:

  • The open and closing braces are the beginning and end of the closure definition.
  • parameters are what gets passed into the closure, just like function parameters. They are available within the closure. These are omitted if there are no parameters.
  • The parameters are followed by an arrow and the return type (-> returnType). This is what the closure will return once execution is complete. If the closure doesn’t return anything, use the keyword Void or omit the return type and arrow entirely.
  • in is a keyword that separates the input parameters and return type from the closure execution.
  • Any tasks the closure performs follow the in keyword.

Now that we have the basic definition of a closure, let’s take a look at an example:

let myClosure = { print("This is my closure") }

This is a common way to define a closure. Closures can be assigned to variables just like any other type. We can also define a closure using type annotation:

let myClosure: () -> Void = { print("This is my closure") }

While it’s generally preferred to use type inference, it is a matter of preference how a closure is defined. Now that we have defined our closure, we can call it just like a function:

myClosure() // prints “This is my closure”

Great! Not so bad right? If you get confused about the syntax, you can always reference the definitions above.



Create a closure that takes no arguments and returns no value. Have the closure print “Hello closures!” in the console. Assign the closure to a constant named helloClosures


Call the helloClosures closure in the following line.

Take this course for free

Mini Info Outline Icon
By signing up for Codecademy, you agree to Codecademy's Terms of Service & Privacy Policy.
Already have an account?