Sobes.tech
Middle+

O que é um tipo associado (associated type)?

sobes.tech IA

Resposta da IA

O tipo associado (associated type) é um espaço reservado (preenchimento de nome) para um tipo que será efetivamente utilizado no protocolo. Indica que o protocolo exige a presença de um tipo específico, mas não o define explicitamente até que o protocolo seja adotado por um tipo concreto ou na sua extensão.

Vantagens:

  • Flexibilidade: Permite que os protocolos permaneçam universais, trabalhando com qualquer tipo que cumpra os requisitos do tipo associado.
  • Tipagem forte: O compilador conhece o tipo concreto durante a compilação, o que previne erros e garante a segurança do tipo.
  • Melhor legibilidade: O protocolo declara explicitamente o tipo de dados com o qual trabalha, tornando-o mais previsível.

É declarado usando a palavra-chave associatedtype.

Exemplo:

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

struct IntContainer: Container {
    // Especificação explícita do tipo Item (opcional, Swift pode inferir)
    typealias Item = Int
    var items: [Int] = []
    mutating func append(_ item: Int) {
        items.append(item)
    }
}

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

Pode-se adicionar restrições ao tipo associado, por exemplo, exigir que ele seja compatível com outro protocolo:

protocol ComparableContainer {
    associatedtype Element: Comparable // Element deve ser Comparable
    var elements: [Element] { get set }
}