Swift中Objective-C typedef枚举的平等性

时间:2014-06-10 06:51:38

标签: enums swift

我正在使用Swift中的Facebook Objective-C SDK,我试图将FBSessionState值与枚举值进行比较。但是我得到了编译器错误:

  

无法找到' =='接受提供的参数

我基本上想要完成:

if state == FBSessionStateOpen { ... }

我能够通过与价值进行比较来解决这个问题......

if state.value == FBSessionStateOpen.value { ... }

但是我想知道是否有办法让这项工作更像是一个Swift枚举?

4 个答案:

答案 0 :(得分:9)

您可以使用' .value'来解开枚举和常量。获取应该可切换的基础整数:

switch x.value {
  case Foo.value:
}

也许这是一个错误,苹果会在将来的版本中修复它。

答案 1 :(得分:4)

通过Beta4更新,.value变通方法不再有效。在不改变Facebook的SDK的情况下,似乎不是另一种简单的解决方法。

我更改了所有Facebook枚举以使用NS_ENUM宏,因此您可以在枚举中使用Swift语法。

if FBSession.activeSession().state == .CreatedTokenLoaded

这些更改已合并到pgaspar's Facebook fork,其中包含Swift兼容性的其他修补程序。

pod 'Facebook-iOS-SDK', :git => 'https://github.com/pgaspar/facebook-ios-sdk.git'

答案 2 :(得分:2)

根据Nikolai Nagorny的回答,这对我有用:

if (device.deviceType.value == TYPE_BLUETOOTHNA.value)

答案 3 :(得分:-1)

Swift自动将Obj-C枚举映射到自己的enumName.caseName结构样式。例如,如果enum的名称为FBSessionState并且存在FBSessionStateOpen个案,则会在Swift中映射为FBSessionState.Open

==运算符可用于比较Swift枚举。