Lição: 31: Tipos Aninhados em Swift
Em Swift, tipos aninhados são tipos definidos dentro de outro tipo. Eles podem ser classes, structs, enums ou até mesmo typealiases, fornecendo uma maneira de encapsular tipos relacionados e organizar o código. Tipos aninhados trazem clareza e agrupamento lógico ao seu código, tornando-o mais fácil de entender e manter.
Nesta aula, vamos explorar como definir e usar tipos aninhados, juntamente com exemplos práticos.
Definindo Tipos Aninhados
Você pode definir um tipo aninhado dentro de uma classe, struct ou enum da seguinte forma:
struct EstruturaExterna {
struct EstruturaInterna {
var valor: Int
}
var interna: EstruturaInterna
init(valor: Int) {
self.interna = EstruturaInterna(valor: valor)
}
}
Neste exemplo, EstruturaInterna
está definida dentro de EstruturaExterna
. Você pode instanciar EstruturaInterna
como parte de EstruturaExterna
e acessá-la através de uma instância de EstruturaExterna
.
Acessando Tipos Aninhados
Para acessar um tipo aninhado, você utiliza a sintaxe de ponto. Veja como criar uma instância de EstruturaExterna
e acessar seu tipo interno:
let externa = EstruturaExterna(valor: 10)
print(externa.interna.valor) // Saída: 10
Exemplo: Enum Aninhado
Vamos ver como usar enums aninhados. Este exemplo criará uma struct, Veículo
, que contém um enum aninhado chamado TipoCombustível
.
struct Veículo {
enum TipoCombustível {
case gasolina
case diesel
case elétrico
}
var tipo: TipoCombustível
init(tipo: TipoCombustível) {
self.tipo = tipo
}
}
let meuCarro = Veículo(tipo: .gasolina)
print(meuCarro.tipo) // Saída: gasolina
Aqui, o enum TipoCombustível
está definido dentro da struct Veículo
. Ao criar uma instância de Veículo
, você especifica o tipo de combustível usando o enum aninhado.
Exemplo: Classes Aninhadas
Tipos aninhados também podem ser classes. Abaixo está um exemplo de uma classe Biblioteca
que contém uma classe aninhada Livro
:
class Biblioteca {
class Livro {
var titulo: String
init(titulo: String) {
self.titulo = titulo
}
}
var livros: [Livro] = []
func adicionarLivro(titulo: String) {
let novoLivro = Livro(titulo: titulo)
livros.append(novoLivro)
}
}
let minhaBiblioteca = Biblioteca()
minhaBiblioteca.adicionarLivro(titulo: "1984")
print(minhaBiblioteca.livros[0].titulo) // Saída: 1984
Neste caso, a classe Livro
está aninhada dentro da classe Biblioteca
. Você pode criar e gerenciar livros de forma mais conveniente como parte do contexto da biblioteca.
Exemplo: Typealiases Aninhados
Você também pode criar typealiases aninhados. Isso é útil para criar tipos mais descritivos que dependem de seu tipo pai:
struct Container {
typealias Item = Int
var itens: [Item]
init(itens: [Item]) {
self.itens = itens
}
}
let containerNumeros = Container(itens: [1, 2, 3])
print(containerNumeros.itens) // Saída: [1, 2, 3]
Aqui, definimos um typealias Item
para Int
dentro da struct Container
, permitindo uma melhor legibilidade e um propósito mais claro.
Resumo
Tipos aninhados em Swift oferecem uma maneira poderosa de estruturar e organizar seu código. Você pode definir classes, structs, enums e typealiases dentro de outros tipos para criar agrupamentos lógicos e encapsular funcionalidades. Utilize tipos aninhados para melhorar a legibilidade e a manutenibilidade do código, garantindo que componentes relacionados estejam intimamente ligados.
Ao dominar os tipos aninhados, você poderá escrever um código Swift mais organizado e gerenciável.