You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Objective-C中通过名称获取枚举值?

Objective-C中实现类似Java枚举valueOf的功能?

首先是定义的枚举类型:

typedef NS_ENUM(NSInteger, CameraMode) {
  DEFAULT,
  SMART,
  LIVENESS,
  DOCUMENT
};

我想要实现类似如下的功能:

NSInteger mode = CameraMode.getValue("DEFAULT");

请问这在Objective-C中是否可行?我曾在Java中通过如下方式实现类似功能:

CameraMode.valueOf("DEFAULT");

Objective-C的NS_ENUM本质是基于NSInteger的底层枚举类型,并没有像Java枚举那样内置字符串转枚举的valueOf方法,需要手动实现对应的转换逻辑。

你可以通过以下几种方式实现类似需求:

方式一:工具函数实现

CameraMode CameraModeFromString(NSString *modeString) {
    if ([modeString isEqualToString:@"DEFAULT"]) {
        return DEFAULT;
    } else if ([modeString isEqualToString:@"SMART"]) {
        return SMART;
    } else if ([modeString isEqualToString:@"LIVENESS"]) {
        return LIVENESS;
    } else if ([modeString isEqualToString:@"DOCUMENT"]) {
        return DOCUMENT;
    }
    // 非法输入时返回默认值,也可根据需求抛出异常
    return DEFAULT;
}

调用示例:

CameraMode mode = CameraModeFromString(@"DEFAULT");

方式二:封装类方法实现

如果想让调用语法更贴近你期望的形式,可以封装成类方法:

@interface CameraModeHelper : NSObject
+ (CameraMode)cameraModeFromString:(NSString *)string;
@end

@implementation CameraModeHelper
+ (CameraMode)cameraModeFromString:(NSString *)string {
    static NSDictionary *modeMap;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        modeMap = @{
            @"DEFAULT": @(DEFAULT),
            @"SMART": @(SMART),
            @"LIVENESS": @(LIVENESS),
            @"DOCUMENT": @(DOCUMENT)
        };
    });
    NSNumber *modeNum = modeMap[string];
    return modeNum ? modeNum.integerValue : DEFAULT;
}
@end

调用示例:

CameraMode mode = [CameraModeHelper cameraModeFromString:@"DEFAULT"];

另外需要注意:你示例中的NSInt *mode是错误写法,正确类型应为CameraMode或NSInteger——因为Objective-C枚举本质是基础整数类型,并非对象指针。

内容的提问来源于stack exchange,提问作者Giulia Lage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:24:13