Defining a generic
A generic is very similar to a type alias. The difference is that the exact type of a generic is determined by the context in which it is used, instead of the implementing types. This also means that a generic only has a single implementation that must support all of the possible types. Let's start by defining a generic function.
The generic function
In Chapter 5, A Modern Paradigm – Closures and Functional Programming, we created a function that helped us find the first number in an array of numbers that passes a test:
func firstInNumbers( numbers: [Int], passingTest: (number: Int) -> Bool ) -> Int? { for number in numbers { if passingTest(number: number) { return number } } return nil }
This would be great if we only ever deal with arrays of the Int
types, but clearly, it would be helpful if we are able to do this with other types. In fact, I dare say, it would be helpful for all types. We can achieve this very simply...