在swift中使用非NS_ENUM objective-C枚举

Man*_*eau 14 swift

我正在使用wahoo fitness API,它定义了以下Objective-C enum:

typedef enum
{
    /** No active connection. */
    WF_SENSOR_CONNECTION_STATUS_IDLE,
    /** The connection is in process of being established. */
    WF_SENSOR_CONNECTION_STATUS_CONNECTING,
    /** The sensor connection is established and active. */
    WF_SENSOR_CONNECTION_STATUS_CONNECTED,
    /** The connection was interrupted (usually occurs when fisica is disconnected). */
    WF_SENSOR_CONNECTION_STATUS_INTERRUPTED,
    /** The connection is in process of being disconnected. */
    WF_SENSOR_CONNECTION_STATUS_DISCONNECTING,

} WFSensorConnectionStatus_t;
Run Code Online (Sandbox Code Playgroud)

我无法找到一种在swift中使用它的方法.我首先尝试在其上做一个开关/案例但没有成功.我只是想继续并尝试以下方面:

var connState : WFSensorConnectionStatus_t = WF_SENSOR_CONNECTION_STATUS_IDLE
...
if( connState == WF_SENSOR_CONNECTION_STATUS_IDLE){
Run Code Online (Sandbox Code Playgroud)

但它没有编译:

'WFSensorConnectionStatus_t' is not convertible to 'NSObject'
Run Code Online (Sandbox Code Playgroud)

任何解决方法?我阅读使用WFSensorConnectionStatus_t.WF_SENSOR_CONNECTION_STATUS_IDLEWF_SENSOR_CONNECTION_STATUS_IDLE.value但它在xcode beta-4中不起作用.

小智 17

正如您所说,使用.value获取基础整数的解决方法在Beta 4中不再起作用.

不幸的enum是,不能从Objective-C转移到Swift,它需要是一个NS_ENUM.

我在一个项目中拥有与你相同的设置,我需要enum一个Objective-C框架并在Swift中使用它.

我做的解决方法是创建一个包含a的Objective-C类别,NS_ENUM然后我将框架中的值传递enum给我自己的NS_ENUM.

在桥接标题中导入类别,您应该能够enum像往常一样使用它.

像这样的东西:

typedef NS_ENUM(NSUInteger, ConnectionStatus) {
    ConnectionStatusIdle
}

- (ConnectionStatus)connectionStatus {
    if [self getConnectionStatus] == WF_SENSOR_CONNECTION_STATUS_IDLE {
        return ConnectionStatusIdle
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你应该能够像这样使用它:

switch myObject.connectionStatus() {
    case .Idle:
        // do something
        break
}
Run Code Online (Sandbox Code Playgroud)