Swift verfügt über einen leistungsstarken Mechanismus zur Typinferenz - er ermöglicht es dem Compiler, den Typ eines Wertes automatisch zu bestimmen, ohne dass der Programmierer den Typ ausdrücklich angeben muss. Die Typinferenz erleichtert den Code und reduziert dessen "Geräuschpegel". Zum Beispiel:
let number = 42 // wird als Int interpretiert let name = "John" // wird als String interpretiert let items = [1, 2, 3] // wird als [Int] interpretiert
Es ist jedoch wichtig, einige Nuancen zu beachten:
Welchen Typ erhält die Variable, wenn wir
let emptyArray = []deklarieren?
Oft wird gesagt, dass emptyArray ein Array "von allem" oder [Any] sein wird. Tatsächlich kann der Swift-Compiler den Typ nicht ableiten und gibt einen Fehler aus:
let emptyArray = [] // Fehler: leeres Sammlungs-Literal erfordert einen expliziten Typ
Um ein leeres Array zu verwenden, muss der Typ ausdrücklich angegeben werden:
let emptyArray: [Int] = []
Geschichte
Das Team fügte ein leeres Dictionary als let params = [:] hinzu und erwartete, dass der Typ [String: Any] sein würde. Der Compiler konnte jedoch den Typ nicht ableiten, wodurch der Build fehlschlug. Das Ergebnis - verlorene Zeit zur Klärung der Ursache, die auf die Besonderheiten der Typinferenz zurückzuführen war.
Geschichte
Im Projekt wurde der Rückgabetyp einer Funktion verwendet, der als let value = decode(json) definiert war. Der Entwickler rechnete mit [String: Any], aber aufgrund der Mehrdeutigkeit gab der Parser Any zurück, was zu einem Absturz der Anwendung beim Typcasting zur Laufzeit führte.
Geschichte
Sie versuchten, Werte verschiedener Typen in ein Array ohne explizite Angabe hinzuzufügen - let items = [1, "two", 3.0]. Swift bestimmte den Typ als [Any], was zu Logikfehlern führte, wo ein Array von Elementen eines Typs für nachfolgende Operationen erwartet wurde.