我正在使用Swift中的Facebook Objective-C SDK,我试图将FBSessionState值与枚举值进行比较。但是我得到了编译器错误:
无法找到' =='接受提供的参数
我基本上想要完成:
if state == FBSessionStateOpen { ... }
我能够通过与价值进行比较来解决这个问题......
if state.value == FBSessionStateOpen.value { ... }
但是我想知道是否有办法让这项工作更像是一个Swift枚举?
答案 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枚举。