当前位置: 首页 > 面试题库 >

快速使用非NS_ENUM Objective-C枚举

王建华
2023-03-14
问题内容

我正在使用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;

我找不到快速使用它的方法。我首先尝试对其进行切换/操作,但未成功。我正要继续进行以下操作:

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获取基础整数的解决方法不再起作用。

不幸的是an enum不能从Objective-C转移到Swift,它必须是an NS_ENUM

我在一个需要enum从Objective-C框架中进行移植并在Swift中使用它的项目中,具有与您相同的设置。

我所做的解决方法是创建一个包含的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
    }
}

然后,您应该可以像这样使用它:

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


 类似资料:
  • 主要内容:1. Objective-C集合快速枚举是Objective-C的功能,用于枚举集合。 因此,要了解快速枚举,首先需要了解集合,这将在下一节中进行说明。 1. Objective-C集合 集合是基本结构。它用于保存和管理其他对象。 集合的主要目的是提供一种有效存储和检索对象的通用方法。 有几种不同类型的集合。 虽然它们都能实现能够容纳其他对象的相同目的,但它们的主要区别在于检索对象的方式。 Objective-C中使用的最常见的

  • 你能在Swift中继承枚举吗?关于枚举继承,应该知道哪些规则? 以下测试代码: 产生

  • 快速枚举是Objective-C的功能,有助于枚举集合。 因此,为了了解快速枚举,我们首先需要了解集合,这将在下一节中进行说明。 Objective-C中的集合 集合是基本结构。 它用于保存和管理其他对象。 集合的整个目的是提供一种有效存储和检索对象的通用方法。 有几种不同类型的集合。 虽然它们都能实现能够容纳其他对象的相同目的,但它们的主要区别在于检索对象的方式。 Objective-C中使用的

  • 问题内容: 背景 我正在尝试使用NSCoding协议对String样式的枚举进行编码,但是我遇到了转换为String和从String返回的错误。 解码和编码时出现以下错误: 字符串不可转换为舞台 额外参数ForKey:通话中 码 问题答案: 您需要将枚举值与原始值进行转换。在Swift 1.2(Xcode 6.3)中,如下所示: Swift 1.1(Xcode 6.1),代替: 迅速1.0(6.0

  • 问题内容: 我需要定义一个可以在使用某些Objective-c类型的类中调用的协议 但是这样做不起作用: 你明白他的错误 如果我没有在协议上放置@objc标记,则它将在采用该协议并从Objective- C类型类(如UIViewController)继承的类中被调用时立即使应用程序崩溃。 所以我的问题是,我应该如何使用@objc标签声明并传递我的枚举? 问题答案: Swift枚举与Obj-C(或C