在Swift中合并Objective-C枚举

3

我正在使用wahoo fitness API(它是用objective-c编写的)在我的swift应用程序中。 我正在尝试将来自枚举的多个位项进行组合,该枚举不是NS_ENUM。 它被定义为:

typedef enum
{
    /** Specifies non-existent sensor. */
    WF_SENSORTYPE_NONE                           = 0,
    /** Specifies the bike power sensor. */
    WF_SENSORTYPE_BIKE_POWER                     = 0x00000001,
    /** Specifies the bike speed sensor. */
    WF_SENSORTYPE_BIKE_SPEED                     = 0x00000002,
    /** Specifies the bike cadence sensor. */
    WF_SENSORTYPE_BIKE_CADENCE                   = 0x00000004,

    ...

} WFSensorType_t;

以下导致出现:'WFSensorType_t' 无法转换为 'Bool'
let sensorType = WF_SENSORTYPE_HEARTRATE | WF_SENSORTYPE_BIKE_SPEED | WF_SENSORTYPE_BIKE_CADENCE // WFSensorType_t

棘手的部分是需要将 sensorType 传递给另一个 wahoo API 对象,该对象接受一个 WFSensorType_t,因此我不能将枚举包装到其他内容中,否则它将无法传递回现有的API。

有什么想法吗?


它不应该是 NS_ENUM,而应该是 NS_OPTIONS: typedef NS_OPTIONS(NSInteger, WFSensorType_t) { ... }; - newacct
1个回答

5

您可以尝试以下方法:

let sensorType = WF_SENSORTYPE_HEARTRATE.value | WF_SENSORTYPE_BIKE_SPEED.value | WF_SENSORTYPE_BIKE_CADENCE.value

然而,Swift 会将 sensorType 推断为类型 UInt8。你不能将其声明为 WFSensorType_t


我在尝试从Swift引用Objective-C枚举时遇到了相同的问题,并收到错误消息“'MyEnum.Type'没有名为'MyEnumValue1'的成员”。这也解决了我的问题,谢谢! - cowlinator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接