Protocolos em Swift: Quando e como utilizar

팔라 데브! Se você começou no Swift ou em programação Recentemente já deve ter se perguntado qual a diferença entre Classes, Structs e Protocolos. Aprimeira vista eles podem parecer iguais e dar a impressão de que têm a mesma finalidade, principalmente quando comparamos Classes com Structs. Apesar de serem parecidas, essas estruturas de dados tem finalidades diferentes! Esse é o Primeiro artigo de três, e nele eu vou falar sobre Protocolos!

Nossa didática



Ao invés de usar exemplos comuns de codigo com estruturas chamadas Pessoa ou Animal , chamaremos nossas estruturas de Foguete ! Vamos para o codigo.

프로토콜



Os protocolos são formatos de dados que você pode construir para ter uma estrutura Personalizada que armazena e padroniza objetos. Eles apenas ditam quais propriedades, metodos ou construtores uma Classe ou Struct deve ter, mas semimplementa-los! Vamos Ver um 예시:

INPE(Instituto Nacional de Pesquisas Espaciais) precisa salvar todos os projetos de seus foguetes를 상상해 보십시오. Cada um deles segue um protocolo de segurança, deve ser transportado e possui um jeito específico de ser lançado, além de ter seus devidos tripulantes, isto é, todos possuem esses métodos e propriedades, deve ser transportado e possui um jeito específico de ser lançado Você poderia pensar "Ora, vamos criar uma classe para cada um", mas sair declarando um monte de classes deliberadamente talvez não seja a melhor solução.

Vamos criar um protocolo chamado Foguete e definir nele as características das nossas nave espaciais:

protocol Foguete {

    static var tripulantes: List<String>

    init(tripulantes: List<String>)

    static func verificarSeguranca()
    static func transportar()
    static func decolar()
}


Muito bem, agora nos temos um padrão de construção de objetos Foguete que pode ser usado para a criação de classes, basta conformar com ele:

class FogueteAurora: Foguete {

    var tripulantes: List<String>

    //init do FogueteAurora
    init(tripulantes: List<String>) {
        self.tripulantes = tripulantes
    }

    // verificarSeguranca do FogueteAurora
    func verificarSeguranca() {
        verificarMotores()
    }

    // transportar do FogueteAurora
    func transportar() {
        transportarNoCaminhao()
    }

    // decolar do FogueteAurora
    static func decolar() {
        ligarMotores()
        soltarDaPlataforma()
    }
}


코드 작성에 대한 주석을 참고하십시오. Eles se reference àsimplementações desse foguete em especifico, se alguma outtra classe conformar com o nosso protocolo ela poderá implementationar os mesmos metodos, mas do jeito que necessita, sem interferir ou ao menos 57 sobre do !

Agora você deve estar perguntando "Mas você não disse que criar classes não era uma boa abordagem?". A questão não é criar muitas ou poucas classes, e sim criar classes padronizadas! Com a existência do protocol to dos os foguetes tem implementationações dos mesmos metodos e propriedades, mas elas não são necessariamente iguais! E se algum objeto não seguir essa esttrutura, não pode ser thinkado um objeto do tipo FogueteAurora .

Tendo um protocolo para a criação de objetos eu posso ter certeza de que se receber um objeto que conforma com o protocolo X esse item vai ter as características de X! Além disso, fica bem mais fácil criar funções que manipulem objetos com essa estrutura, já que agora você tem uma estrutura de dados para usar como tipo.



Vamos ver isso na prática: anagora Imagine que o INPE queira simular a execução das funções do foguetes com uma outra função. Como faríamos isso se apenas tivéssemos um monte classes? Teríamos que pegar uma por uma, verificar se existem todos os metodos necessários e então executa-los. Isso parece trabalhoso, não? Vamos usar o nosso protocolo e criar uma função assim:

func executarFuncoesDoFoguete(foguete: Foguete) {
    foguete.varificarSeguranca()
    foguete.transportar()
    foguete.decolar()
}


Recebemos por parâmetro uma variável do tipo Foguete , que é o nosso protocolo, assim nos semper temos certeza de que os metodos que estamos chamando dentro da nossa funçãoque aziosem, me! No caso de estarem vazios nada acontece, mas se não existissem e tentássemos executa-los teríamos um erro… .

Pronto, agora basta chamar a função passando para ela um objeto que conforme com Foguete, como o Foguete !

콴도 우사르 프로토콜스?



Quando você tem uma esttrutura de dados que precisa ser declarada, mas suaimplementationação nem semper será igual.


Espero ter ajudado a Organizar suas ideias, nos vemos na próxima! 😄


참조
프로토콜 - Swift 프로그래밍 언어(Swift 5.4): https://docs.swift.org/swift-book/LanguageGuide/Protocols.html

좋은 웹페이지 즐겨찾기