Laut der Swift 3-Dokumentation wird NSNumber mit nativen Swift-Typen wie Int, Float, Double usw. verbunden. Aber wenn ich einen nativen Typ im Dictionary verwende, erhalte ich Kompilierungsfehler, die bei der Verwendung von NSNumber behoben werden Das? Hier ist mein Code:
%Vor%und der Compiler gibt den Fehler "Kann keinen Wert des Typs Float AnyObject zuweisen". Wenn ich den Code wie folgt schreibe, gibt es keine Probleme, da NSNumber eigentlich ein Objekttyp ist.
%Vor%Der Swift-Compiler fordert Sie außerdem auf, den Code als
zu korrigieren %Vor%aber ich bin mir nicht sicher, ob es richtig ist oder nicht. Wenn es tatsächlich ein Bridging zwischen NSNumber und nativen Typen (Int, Float usw.) gibt, warum zwingt der Compiler zur Typumwandlung in AnyObject?
Primitive Typen wie Float
, Int
, Double
sind als struct
definiert, sodass sie AnyObject
protocol nicht implementieren. Stattdessen kann Any
eine Instanz eines beliebigen Typs darstellen, sodass der Typ Ihres Wörterbuchs wie folgt lauten sollte:
Abgesehen davon, in Ihrem Code, wenn Sie tun:
%Vor% Float
wird implizit in NSNumber
konvertiert und dann in AnyObject
umgewandelt. Du hättest as NSNumber
einfach machen können, um letzteres zu vermeiden.