2016-07-06 10 views
0

rawValue:を使用してUIntからEnumを作成しています。しかし、スウィフトでUIntEnumにキャストするには、asを使用しますか?ここではWWDC 2016話Delivering an Exceptional Audio Experienceからのスクリーンショットです:「as」でUIntをEnumにキャストすることはできますか?

WWDC sample code casting to Enum

あなたが見ることができるように、コードが辞書から数値を取得し、as!を使用してEnumにそれをキャストします。

私のコードでこれを行うことができませんでした。それは有効なスイフトですか?

例えば、私の意見では、私は同じ列挙型で、私自身の列挙型を使用してコードを再現しようとしていると、それが必要としてキャストが常にクラッシュ
+0

これは有効なスイフトです。私はそれを行うことを提案したが、正確な例を覚えていないときは、ほとんど何度もそれを使用してきました。 –

+1

私はXcode 8の私のバージョンで動作させることができませんでした。直接のキャスト、 'AnyObject'によるキャスト、' NSNumber'によるキャストを試みました。 – Sulthan

答えて

1

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

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

私はスウィフト進化リストを経て私はこれを動作させる可能性のある変化を発見していない。正直言って、WWDCに表示されているすべてのコードスニペットが機能しているわけではありません。

+0

(私はMacではないので、自分自身をテストすることはできません) 'NSObject:AnyObject'で指定された型の' NSDictionary'の値として 'AVAudioSessionInterruptionType'型の' x'を直接使用できますか? (キーとして 'AVAudioSessionInterruptionTypeKey'を使用) – dfri

+0

@dfriいいえ、enumは値型で、' AnyObject'はクラスを表すためです。 – Sulthan

関連する問題