2015-04-21 5 views
10

Ich bin in AppDelegate und versuche, eine Antwort auf eine WatchKit Extension Request zu übergeben. Ich kann kein Array von Enums als Wert in einem Dictionary verwenden, dessen Werte als AnyObject eingegeben werden. in einem Spielplatz Experimenting zeigt dies:Swift [1,2] entspricht AnyObject aber [Enum.a, Enum.b] nicht

enum E : Int { 
    case a = 0 
    case b 
} 
var x : AnyObject = [0, 1] // OK 
var y : AnyObject = [E.a, E.b] // [E] is not convertible to AnyObject 

Natürlich habe ich meine Aufzählungen in Strings oder Zahlen dieses Problem umgehen können, indem man, aber warum ist dies eine Art Fehler in Swift?

Antwort

24

AnyObject existiert für die Kompatibilität mit Objective-C. Sie können Objekte nur in ein [AnyObject] Array setzen, das Objective-C interpretieren kann. Schnelle Enums sind nicht kompatibel mit Objective-C, also musst du sie in etwas umwandeln, das ist.

var x: AnyObject = [0, 1] funktioniert, weil Swift automatisch die Übersetzung von Int in den Typ NSNumber behandelt, die Objective-C verarbeiten kann. Leider gibt es keine solche automatische Konvertierung für Swift Aufzählungen, so dass Sie, wie etwas zu tun sind von links nach:

var y: AnyObject = [E.a.rawValue, E.b.rawValue] 

Dies setzt voraus, dass Ihr Enum einen zugrunde liegenden Typen hat, die Objective-C verarbeiten kann, wie String oder Int.

Ein anderes Beispiel für etwas, das nicht funktioniert, ist optional.

Weitere Informationen finden Sie unter Working with Cocoa Data Types.

+1

Ah, du weißt, ich habe AnyObject mit Any verwechselt. Hoppla! –

Verwandte Themen