NSNummer vs Int, Float in Swift-Wörterbuch

8

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?

    
Deepak Sharma 23.04.2017, 08:20
quelle

2 Antworten

6

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:

%Vor%

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.

    
ozgur 23.04.2017, 08:26
quelle
1
%Vor%

wenn Sie AnyObject wirklich als Wert haben möchten

%Vor%     
user3441734 23.04.2017 08:34
quelle

Tags und Links