作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 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_IDLE
或 WF_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/
我是一名优秀的程序员,十分优秀!