Avatar ·

Como determinar o tipo de objeto em Swift? (type(of:) e is/as)

Olá a todos! Comecei a estudar Swift e estou escrevendo meu primeiro aplicativo. Encontrei um problema: preciso entender de que tipo é o objeto armazenado em uma variável, especialmente quando uso protocolos ou herança. Aqui está um exemplo. Tenho uma classe base `Animal` e duas subclasses: `Dog` e `Cat`. Crio um array `let animals: [Animal] = [Dog(), Cat(), Dog()]` e quero em um loop for-in determinar qual deles é cachorro e qual é gato. Em outras linguagens (por exemplo, em C#), eu usava `typeof()` ou `is` para verificar. Como fazer isso em Swift? Tentei escrever `if animal is Dog { ... }`, mas isso funciona apenas para verificação, e como obter o nome do tipo como string? Também ouvi falar sobre `type(of:)`, mas não entendo qual é a diferença entre `type(of:)` e `is`/`as`. Preciso não apenas verificar, mas às vezes também fazer o cast do objeto.