2016-07-06 1 views
0

rawValue:을 사용하여 UInt에서 Enum을 생성하는 것에 대해 알고 있습니다. 그러나 012 신속한 수 UIntEnumas을 사용하여? 다음은 WWDC 2016 이야기 Delivering an Exceptional Audio Experience에서 스크린 샷입니다 :UInt를 "as"로 Enum에 캐스트 할 수 있습니까?

WWDC sample code casting to Enum

당신이 볼 수 있듯이, 코드는 사전에서 숫자 값을 검색하고 as!를 사용하여 Enum에 캐스팅.

내 코드에서이 작업을 수행하지 못했습니다. 유효한 스위프트인가?

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

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

내가 스위프트 진화의 목록을했다 : 그것은해야한다, 예를 들어, 내 의견에로

+0

예, Swift가 유효합니다. 나는 그것을 할 것을 제안했을 때 대부분 여러 번 사용했지만 정확한 예를 기억하지는 않습니다. –

+1

Xcode 8의 제 버전에서 제대로 작동하지 못했고 직접 형 변환,'AnyObject'를 통한 형 변환 및'NSNumber'를 통한 형 변환을 시도했습니다. – Sulthan

답변

1

나도 같은 열거 형과 내 자신의 열거와 캐스트의 코드를 재현하기 위해 노력 해왔다 항상 충돌 그리고 이것이 작동하게 할 수있는 변화를 발견하지 못했습니다. 솔직히 말해서 WWDC에 표시된 모든 코드 스 니펫이 작동하는 것은 아닙니다.

+0

(저는 Mac에 없기 때문에 자신을 테스트 할 수 없습니다.)'NSObject : AnyObject'로 지정된 유형 인 NSDictionary에서 값으로 직접 ('AVAudioSessionInterruptionType' 유형의)'x'를 사용할 수 있습니까? (AVAudioSessionInterruptionTypeKey'를 키로 사용) – dfri

+0

@dfri 열거 형이 값 유형이고'AnyObject'가 클래스를 나타 내기 때문에 No입니다. – Sulthan

관련 문제