SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
17.11.2024

Lição: 52: Fila de Operações e Operações em Swift

Nesta aula, vamos explorar o conceito de Filas de Operações e Operações em Swift. Estas são ferramentas poderosas fornecidas pelo framework Foundation para gerenciar operações concorrentes de forma eficiente e fácil de usar.

O que são Operações?

Operações são instâncias da classe Operation (ou suas subclasses) que representam uma única tarefa. As operações podem ser executadas de forma concorrente e permitem que você encapsule o código para execução de tarefas, relatórios de progresso e gerenciamento de conclusão.

Criando uma Operação Personalizada

Para criar uma operação personalizada, você pode subclassificar Operation. Aqui está um exemplo simples:

import Foundation

class CustomOperation: Operation {

    var inputData: Int
    var outputData: Int?

    init(inputData: Int) {
        self.inputData = inputData
        super.init()
    }

    override func main() {
        if isCancelled {
            return
        }

        // Simular uma tarefa demorada
        print("Processando \(inputData)...")
        outputData = inputData * 2

        if isCancelled {
            return
        }

        print("Processamento concluído de \(inputData) -> \(String(describing: outputData))")
    }
}

O que são Filas de Operações?

Uma OperationQueue é uma fila que executa objetos Operation. Ela gerencia a execução concorrente das operações, permitindo que você adicione operações e deixe a fila lidar com a execução delas. Você pode definir o número máximo de operações concorrentes, gerenciar dependências entre operações e cancelar operações se necessário.

Usando Fila de Operações

Veja como usar uma fila de operações para executar nossas operações personalizadas:

import Foundation

let operationQueue = OperationQueue()

// Criando instâncias de CustomOperation
let operation1 = CustomOperation(inputData: 1)
let operation2 = CustomOperation(inputData: 2)
let operation3 = CustomOperation(inputData: 3)

// Adicionando operações à fila
operationQueue.addOperations([operation1, operation2, operation3], waitUntilFinished: false)

// Aguardar um pouco para permitir que as operações sejam concluídas
OperationQueue.main.addOperation {
    sleep(2)
    print("Todas as operações foram concluídas.")
}

Dependências Entre Operações

Uma das características poderosas das operações é a capacidade de definir dependências entre elas. Isso significa que uma operação pode esperar que outra seja concluída antes de começar a execução.

Adicionando Dependências

Vamos modificar nosso exemplo para fazer com que operation3 dependa de operation2:

import Foundation

let operationQueue = OperationQueue()

let operation1 = CustomOperation(inputData: 1)
let operation2 = CustomOperation(inputData: 2)
let operation3 = CustomOperation(inputData: 3)

// Definindo dependência
operation3.addDependency(operation2)

// Adicionando operações à fila
operationQueue.addOperations([operation1, operation2, operation3], waitUntilFinished: false)

OperationQueue.main.addOperation {
    sleep(2)
    print("Todas as operações foram concluídas.")
}

Neste exemplo, operation3 não começará até que operation2 tenha sido concluída.

Cancelando Operações

Você também pode cancelar operações se elas não forem mais necessárias. Veja como fazer isso:

import Foundation

let operationQueue = OperationQueue()

let operation1 = CustomOperation(inputData: 1)
let operation2 = CustomOperation(inputData: 2)

// Adicionando operações à fila
operationQueue.addOperations([operation1, operation2], waitUntilFinished: false)

// Cancelando a primeira operação
operation1.cancel()

OperationQueue.main.addOperation {
    sleep(2)
    print("Todas as operações foram concluídas.")
}

Nesse caso, operation1 não executará sua tarefa, pois foi cancelada.

Conclusão

Nesta aula, abordamos o básico sobre Filas de Operações e Operações em Swift. Aprendemos como criar operações personalizadas, gerenciar dependências entre elas e como executá-las usando uma fila de operações. Este conhecimento pode aumentar significativamente sua capacidade de lidar com tarefas concorrentes em suas aplicações, tornando-as mais eficientes e responsivas.

Sinta-se à vontade para experimentar esses conceitos para entender melhor como você pode aproveitar as filas de operações e operações em seus próprios projetos!

Video

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

Thank you for voting!