我正在使用wahoo健身API,它定义了以下目标-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;我想不出用什么方法在斯威夫特。我第一次试着对它做一个开关/箱子,但没有成功。我现在只想继续做下去,尝试以下几点:
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中不起作用。
发布于 2014-07-25 07:36:40
使用.value获取基本整数的解决方法不再像您所说的那样,从Beta 4开始工作。
不幸的是,enum不能从Objective转移到Swift,它需要是一个NS_ENUM。
在一个项目中,我需要来自Objective框架的enum,并在Swift中使用它,我的设置与您相同。
我所做的解决办法是创建一个包含NS_ENUM的Objective类别,并在那里将值从框架enum传递到我自己的NS_ENUM。
导入桥接标题中的类别,您应该能够像通常那样使用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
}发布于 2014-07-26 03:25:41
以下是最终的完整解决方案:
WFSensorConnection+SensorConnectionEnumCategory.h#import <Foundation/Foundation.h>
#import <WFConnector/WFConnector.h>
@interface WFSensorConnection (SensorConnectionEnumCategory)
typedef NS_ENUM(NSUInteger, ConnectionStatus) {
ConnectionStatusIdle,
ConnectionStatusConnecting,
ConnectionStatusConnected,
ConnectionStatusInterrupted,
ConnectionStatusDisconnecting
};
- (ConnectionStatus) swift_connectionStatus;
@endWFSensorConnection+SensorConnectionEnumCategory.m#import "WFSensorConnection+SensorConnectionEnumCategory.h"
@implementation WFSensorConnection (SensorConnectionEnumCategory)
- (ConnectionStatus) swift_connectionStatus{
if ( [self connectionStatus] == WF_SENSOR_CONNECTION_STATUS_IDLE ){
return ConnectionStatusIdle;
} else if ( [self connectionStatus] == WF_SENSOR_CONNECTION_STATUS_CONNECTING ){
return ConnectionStatusConnecting;
} else if ( [self connectionStatus] == WF_SENSOR_CONNECTION_STATUS_CONNECTED ){
return ConnectionStatusConnected;
} else if ( [self connectionStatus] == WF_SENSOR_CONNECTION_STATUS_DISCONNECTING ){
return ConnectionStatusDisconnecting;
} else if ( [self connectionStatus] == WF_SENSOR_CONNECTION_STATUS_INTERRUPTED ){
return ConnectionStatusInterrupted;
}
return 0;
}
@endBridging-Header.h#import "WFSensorConnection+SensorConnectionEnumCategory.h"用法:
var sensorConnection: WFSensorConnection?
var connState : ConnectionStatus = ConnectionStatus.Idle
connState = sensorConnection!.swift_connectionStatus()
switch connState {
case ConnectionStatus.Idle:
...
}发布于 2015-09-22 13:38:55
C风格枚举在像UInt32这样的Swift中导入。所以你可以做这样的事情:
let state = unsafeBitCast(WF_SENSOR_CONNECTION_STATUS_IDLE, UInt32.self)
if state == unsafeBitCast(WF_SENSOR_CONNECTION_STATUS_IDLE, UInt32.self) {
//do something
}Upd:在SWIFT2.1 (Xcode 7.1 beta 2)中,所有C风格枚举都符合Equatable,您现在可以这样使用它:
let state = WF_SENSOR_CONNECTION_STATUS_IDLE
if state == WF_SENSOR_CONNECTION_STATUS_IDLE {
//do something
}利润:)
https://stackoverflow.com/questions/24948082
复制相似问题