Paul Hudson @twostraws 28 de Maio de 2020

atualizado para Xcode 12.5

a fundição de tipos nos permite dizer ao Swift que um objeto que ele acha que é o tipo A é realmente o tipo B, O que é útil ao trabalhar com protocolos e herança de classe.

como você viu, os protocolos nos permitem agrupar funcionalidades comuns para que possamos compartilhar código. No entanto, algumas vezes precisamos ir na direção oposta – precisamos ser capazes de ver “você tem um objeto que está em conformidade com um protocolo, mas eu gostaria que você me deixasse usá-lo como um tipo específico.”

para demonstrar isso, aqui está uma hierarquia de classes simples:

class Person { var name = "Anonymous"}class Customer: Person { var id = 12345}class Employee: Person { var salary = 50_000}

eu usei valores padrão para cada propriedade, então não precisamos escrever um inicializador.

podemos criar uma instância de cada uma delas e adicioná-las à mesma matriz:

let customer = Customer()let employee = Employee()let people = 

como ambos Customer e Employee herdam de Person, Swift considerará que people constant seja uma matriz Person. Assim, se quisermos fazer um loop através de people vamos apenas ser capaz de acessar o name de cada item na matriz – ou, pelo menos, nós só seria capaz de fazer que, se não fosse por tipo de carcaça:

for person in people { if let customer = person as? Customer { print("I'm a customer, with id \(customer.id)") } else if let employee = person as? Employee { print("I'm an employee, earning $\(employee.salary)") }}

Como você pode ver, que tenta converter person primeiro Customer e depois Employee. Se um dos testes for aprovado, podemos usar as propriedades extras que pertencem a essa classe, bem como a propriedade name da classe pai.

o casting de tipo não é especificamente desaprovado no Swift, mas eu diria que o casting de tipo repetido pode significar que você tem um problema subjacente em seu código. Mais especificamente, o Swift funciona melhor quando entende com quais dados você está trabalhando, e um tipo de elenco diz efetivamente ao Swift: “eu sei mais informações do que você.”Se você puder encontrar maneiras de transmitir essas informações ao Swift para que ele também as entenda, isso geralmente funciona melhor.

Hacking com Swift é patrocinado pela RevenueCat

a construção patrocinada e a manutenção da infraestrutura de assinatura no aplicativo são difíceis. Felizmente, há uma maneira melhor. Com o RevenueCat, você pode implementar assinaturas para seu aplicativo em horas, não meses, para que possa voltar a criar seu aplicativo.

Experimente gratuitamente

patrocine Hacking com Swift e alcance a maior comunidade Swift do mundo!

Deixe uma resposta

O seu endereço de email não será publicado.