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

标签 swift

我正在使用 wahoo fitness API,它定义了以下 objective-C 枚举:

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;

我找不到快速使用它的方法。我首先尝试在它上面做一个 switch/case 但没有成功。我现在只想继续并尝试以下操作:

var connState : WFSensorConnectionStatus_t = WF_SENSOR_CONNECTION_STATUS_IDLE
...
if( connState == WF_SENSOR_CONNECTION_STATUS_IDLE){

但它不编译:

'WFSensorConnectionStatus_t' is not convertible to 'NSObject'

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

最佳答案

如您所说,从 Beta 4 开始,使用 .value 获取基础整数的解决方法不再有效。

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

我在一个项目中的设置与您相同,我需要来自 Objective-C 框架的 enum 并在 Swift 中使用它。

我所做的解决方法是创建一个包含 NS_ENUM 的 Objective-C 类别,然后我将值从框架 enum 转移到我自己的 NS_ENUM

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

像这样:

typedef NS_ENUM(NSUInteger, ConnectionStatus) {
    ConnectionStatusIdle
}

- (ConnectionStatus)connectionStatus {
    if [self getConnectionStatus] == WF_SENSOR_CONNECTION_STATUS_IDLE {
        return ConnectionStatusIdle
    }
}

那么你应该可以像这样使用它:

switch myObject.connectionStatus() {
    case .Idle:
        // do something
        break
}

关于swift - 在 swift 中使用非 NS_ENUM objective-C 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948082/

相关文章:

ios - 无法在具有@objc 属性的协议(protocol)中使用自定义类?

ios - 在 UICollectionView 中选择单元格时将值传递给另一个 ViewController

ios - 按钮上的无限动画使其在 Swift 中不可点击

swift - 有没有办法知道 Swift 是如何计算 hashValue 的?

Swift - 通过代码链接 UIViewController

arrays - 从二维数组中获取列——如何限制扩展中的数组类型?

ios - 如何在 Realm Swift 中重新排序 UITableView 单元格?

swift - 判断NSImageView是否高亮

ios - 尝试在 swift 中为 iphone 构建 tableView 时出现错误

ios - 使用 Swift 更新核心数据对象