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 }
}