Summary
In this chapter, we saw that we can define a closure just like we can define an integer or string type. We can assign closures to a variable, pass them as an argument to functions, and return them from functions. Closures capture strong references to any constants or variables from the context in which the closure was defined. We do have to be careful with this functionality, to make sure that we do not create a strong reference cycle, which would lead to memory leaks in our applications.
Swift closures are very similar to blocks in Objective-C, but they have a much cleaner and more eloquent syntax. This makes them a lot easier to use and understand. Having a good understanding of closures is vital to mastering the Swift programming language and will make it easier to develop great applications that are easy to maintain. They are also essential for creating first-class frameworks that are easy both to use and to maintain.
The use cases that we looked at in this chapter...