SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
15.11.2024

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.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!