2016-07-06 12 views
0

Ich bin mir bewusst, eine Enum von UInt mit rawValue: erstellen. Kann aber Swift einen UInt zu einem Enum mit as? Hier ist ein Screenshot von der WWDC 2016 Vortrag Delivering an Exceptional Audio Experience:Kann Swift ein UInt mit "as" in ein Enum umwandeln?

WWDC sample code casting to Enum

Wie Sie sehen können, ruft der Code einen numerischen Wert aus dem Wörterbuch und wirft es auf ein Enumas! verwenden.

Ich konnte dies in meinem Code nicht tun. Ist es Swift gültig?

+0

Sie ist gültig Swift. Ich habe es oft benutzt, hauptsächlich wenn es vorgeschlagen hat, es zu tun, aber erinnere mich nicht an genaues Beispiel. –

+1

Ich konnte es nicht in meiner Version von Xcode 8 arbeiten lassen und habe eine direkte Besetzung, eine Umwandlung durch 'AnyObject' und eine Umwandlung durch' NSNumber' versucht. – Sulthan

Antwort

1

Ich habe versucht, den Code mit dem gleichen Enum zu reproduzieren und mit meinem eigenen Aufzählungen und den Darstellern stürzt immer, wie es sollte, meiner Meinung nach, zum Beispiel:

let x: AVAudioSessionInterruptionType = .began 
let dictionary: NSDictionary = [AVAudioSessionInterruptionTypeKey: x.rawValue as NSNumber] 

// crash 
let value = dictionary[AVAudioSessionInterruptionTypeKey] as! AVAudioSessionInterruptionType 

ich durch die Swift Evolution Liste ging und ich habe keine Änderung gefunden, die dazu führen könnte, dass dies funktioniert. Um ehrlich zu sein, funktionieren nicht alle Codeschnipsel, die auf WWDC angezeigt werden.

+0

(Ich bin nicht auf dem Mac, also kann ich mich nicht testen) können Sie 'x' (vom' AVAudioSessionInterruptionType' -Typ) direkt als Wert in einem 'NSDictionary' verwenden, dessen Typ als' NSObject: AnyObject' angegeben ist? (unter Verwendung von 'AVAudioSessionInterruptionTypeKey' als Schlüssel) – dfri

+0

@dfri Nein, weil eine enum ein Werttyp ist und' AnyObject' Klassen repräsentiert. – Sulthan