2016-07-06 41 views
0

我知道从UInt使用rawValue:创建Enum。然而,Swift可以使用asUInt投射到Enum?下面是来自WWDC 2016的谈话Delivering an Exceptional Audio Experience截图:Swift可以将一个UInt投射到一个带有“as”的枚举?

WWDC sample code casting to Enum

正如你看到的,代码从词典中检索数字值,并使用as!它转换成Enum

我还没有能够在我的代码中做到这一点。它是否有效Swift?

+0

它是有效的Swift。我曾多次使用过它,主要是它建议这样做,但不记得确切的例子。 –

+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上,所以不能测试自己)你可以直接使用'x'('AVAudioSessionInterruptionType'类型)作为NSDictionary类型的值,该类型被指定为NSObject:AnyObject? (使用'AVAudioSessionInterruptionTypeKey'作为键) – dfri

+0

@dfri否,因为枚举是一个值类型,而'AnyObject'表示类。 – Sulthan

相关问题