SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
14.11.2024

Lição: 22: Inicialização e Desinicialização em Swift

Em Swift, toda classe, estrutura e enumeração possui um inicializador que configura o estado inicial de uma instância. Além disso, a desinicialização é um processo de execução de limpeza pouco antes de uma instância ser desalocada. Nesta aula, abordaremos como utilizar efetivamente a inicialização e a desinicialização em Swift.

Inicialização

1. Inicialização Básica

Em Swift, você define um inicializador usando a palavra-chave init. Aqui está um exemplo simples:

class Pessoa {
    var nome: String
    var idade: Int

    // Inicializador
    init(nome: String, idade: Int) {
        self.nome = nome
        self.idade = idade
    }
}

// Criando uma instância da Pessoa
let pessoa = Pessoa(nome: "Alice", idade: 30)
print("Nome: \(pessoa.nome), Idade: \(pessoa.idade)")

2. Inicializadores Padrão

Se todas as propriedades de uma classe ou estrutura têm valores padrão, um inicializador padrão é fornecido automaticamente:

class Cachorro {
    var nome: String = "Desconhecido"
    var idade: Int = 0
}

let cachorro = Cachorro()
print("Nome: \(cachorro.nome), Idade: \(cachorro.idade)")

3. Inicializadores de Conveniência

Você também pode criar inicializadores de conveniência para fornecer maneiras adicionais de criar instâncias. Eles podem chamar um inicializador designado:

class Retangulo {
    var largura: Double
    var altura: Double

    // Inicializador designado
    init(largura: Double, altura: Double) {
        self.largura = largura
        self.altura = altura
    }

    // Inicializador de conveniência
    convenience init(ladoQuadrado: Double) {
        self.init(largura: ladoQuadrado, altura: ladoQuadrado)
    }
}

let quadrado = Retangulo(ladoQuadrado: 5.0)
print("Largura: \(quadrado.largura), Altura: \(quadrado.altura)")

4. Inicializadores Failsafe

Você pode criar inicializadores que podem falhar retornando nil. Isso é particularmente útil quando os valores iniciais devem atender a certas condições.

class Conta {
    var saldo: Double

    // Inicializador failsafe
    init?(saldo: Double) {
        if saldo < 0 {
            return nil // Inicializador falha
        }
        self.saldo = saldo
    }
}

if let contaValida = Conta(saldo: 100.0) {
    print("Conta criada com saldo: \(contaValida.saldo)")
} else {
    print("Falha ao criar conta devido a saldo negativo.")
}

Desinicialização

A desinicialização é realizada quando uma instância de uma classe é desalocada. Você pode definir um desinicializador em uma classe usando a palavra-chave deinit.

1. Desinicializador Básico

Aqui está um exemplo de uma classe com um desinicializador:

class Recurso {
    init() {
        print("Recurso inicializado.")
    }

    deinit {
        print("Recurso desinicializado.")
    }
}

// Criando e liberando uma instância de Recurso
do {
    let recurso = Recurso()
} // Recurso é desinicializado aqui

2. Usando Desinicializadores com Closures

Quando você está usando closures que capturam instâncias de uma classe, pode ser necessário gerenciar a limpeza no desinicializador. Aqui está um exemplo:

class GerenciadorDeRede {
    var concluido: (() -> Void)?

    init() {
        concluido = {
            print("Operação de rede concluída.")
        }
    }

    deinit {
        concluido = nil
        print("GerenciadorDeRede desalocado.")
    }
}

do {
    let gerenciador = GerenciadorDeRede()
} // GerenciadorDeRede é desinicializado aqui

Conclusão

Nesta aula, exploramos os conceitos de inicialização e desinicialização em Swift. Vimos como criar inicializadores básicos, de conveniência e failsafe, assim como implementar desinicializadores para realizar a limpeza quando uma instância é desalocada. Dominar esses conceitos é essencial para gerenciar o ciclo de vida de instâncias e a gestão de recursos em suas aplicações Swift.

Video

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

Thank you for voting!