2016-05-31 6 views
1
var array = [AnyObject]() 
struct Test {} 
array.append(Test()) 

Wenn ich diesen Code in dem Boden Stück schreibe es gibt mir den folgenden Fehler Typen ‚Test‘ nicht entspricht Protokoll ‚ANYOBJECT‘Type Casting Für ANYOBJECT Instanzen jeden Referenztyp darzustellen

Ich schätze, es scheitert, weil struct ein Werttyp ist, kein Referenztyp. Aber wenn ich diesen Code ausführen

var array = [AnyObject]() 
array.append(1) 
array.append(2.0) 
array.append("3") 

Es funktioniert aber diese sind auch alle Arten Wert, aber in diesem Fall kein Fehler gegeben Warum?

+1

diese Antwort lesen http://stackoverflow.com/a/32554435/5475238 –

Antwort

0

Für Ihren Erfolgsfall wird hinter den Kulissen etwas konvertiert.

Versuchen Sie, diese am Ende Ihrer Appends Hinzufügen zu sehen, was passiert:

for item in array { 
    print(item.dynamicType) 
} 
+0

Es druckt diese __NSCFNumber __NSCFNumber _NSContiguousString aber meine Werttypen waren Nummer, Doppel und String –

+1

Diese "einige Konvertierung" ist dokumentiert in https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html: String -> NSString; Int, Float, Double -> NSNummer. –

+0

@MartinR Ich ging mit der "Sehen ist glauben" -Theorie. :) –

Verwandte Themen