Avatar ·

Klassentyp-Prüfung in switch in Swift: Wie vergleicht man eine Instanz mit einem Typ?

Hallo zusammen! Ich bin neu in Swift und habe ein Problem bei der Arbeit mit Klassen und switch. Ich habe eine Klassenhierarchie: die Basisklasse `Animal` und ihre Unterklassen `Dog`, `Cat`, `Bird`. Ich erhalte ein Array `[Animal]` und möchte für jedes Element je nach seinem tatsächlichen Typ unterschiedliche Aktionen ausführen. In Objective-C könnte ich `isKindOfClass:` verwenden, aber in Swift funktioniert das nicht.\n\nHier ist mein aktueller Code, der nicht kompiliert:\n\n```swift\nclass Animal {}\nclass Dog: Animal {}\nclass Cat: Animal {}\nclass Bird: Animal {}\n\nlet animals: [Animal] = [Dog(), Cat(), Bird(), Dog()]\n\nfor animal in animals {\n switch animal {\n case is Dog:\n print(\"Gav!\")\n case is Cat:\n print(\"Miau!\")\n case is Bird:\n print(\"Chirik!\")\n default:\n print(\"Unbekanntes Tier\")\n }\n}\n```\n\nFehler: `'is' patterns may only appear in a case of a 'switch' statement, not in a 'for' loop`. Aber ich verwende switch doch innerhalb von for! Was ist los? Wie überprüft man den Typ richtig?