Swift version: 5.10
Generics are a way of making one data type act in a variety of ways depending on how it is created. You’ve already used them whether you realized or not: Swift has an Array
type, but it is generic – it doesn’t contain any sort of specific data. Instead, you ask for arrays that hold specific kinds of data by using things like [String]
to get a string array.
It’s not hard to create generics of your own, and to demonstrate that we’re going to create a simple Queue
type. These are first-in, first-out data structures (FIFO), which means you add things to the back and remove them from the front – much like a real-life queue.
We want this queue to be generic, and in Swift you do that by writing the name of a generic placeholder inside angle brackets, like this: struct Queue<T> {
. That T
doesn’t mean anything special – it could have been R
or Element
– but T
is commonly used.
Inside the queue we’re going to have an internal array tracking the items we’re storing, and we’ll write methods to add and remove items.
Here’s the complete Queue
struct:
struct Queue<T> {
private var internalArray = [T]()
var count: Int {
return internalArray.count
}
mutating func add(_ item: T) {
internalArray.append(item)
}
mutating func remove() -> T? {
if internalArray.count > 0 {
return internalArray.removeFirst()
} else {
return nil
}
}
}
You can now create a queue to store any object you want. For example, this create a queue of integers:
let queue = Queue<Int>()
SPONSORED Superwall lets you build & test paywalls without shipping updates. Run experiments, offer sales, segment users, update locked features and more at the click of button. Best part? It's FREE for up to 250 conversions / mo and the Superwall team builds out 100% custom paywalls – free of charge.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Available from iOS 8.0 – learn more in my book Pro Swift
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.
Link copied to your pasteboard.