Sobes.tech
Middle+

What is an associated type?

sobes.tech AI

Answer from AI

An associated type is a placeholder for a type that will be used in a protocol. It indicates that the protocol requires a certain type to be specified, but does not define its name explicitly until the protocol is adopted by a specific type or in its extension.

Advantages:

  • Flexibility: Allows protocols to remain generic, working with any type that conforms to the associated type requirements.
  • Strong typing: The compiler knows the specific type at compile time, preventing errors and ensuring type safety.
  • Improved readability: The protocol explicitly states the data type it works with, making its usage more predictable.

It is declared using the associatedtype keyword.

Example:

protocol Container {
    associatedtype Item // Associated type Item
    var items: [Item] { get set }
    mutating func append(_ item: Item)
}

struct IntContainer: Container {
    // Explicitly specify the type Item (optional, Swift can infer it)
    typealias Item = Int
    var items: [Int] = []
    mutating func append(_ item: Int) {
        items.append(item)
    }
}

struct StringContainer: Container {
    var items: [String] = [] // Swift infers that Item = String
    mutating func append(_ item: String) {
        items.append(item)
    }
}

You can add constraints to the associated type, for example, requiring it to conform to another protocol:

protocol ComparableContainer {
    associatedtype Element: Comparable // Element must be Comparable
    var elements: [Element] { get set }
}
What is an associated type? — iOS - sobes.tech