gpt4 book ai didi

objective-c - 从枚举派生字符串的方法

转载 作者:行者123 更新时间:2023-12-02 05:09:55 25 4
gpt4 key购买 nike

我一直想知道是否有一种优雅的方法可以从 Objective-C 或普通 C 中的枚举派生字符串。我目前正在使用这样的 switch 语句:

switch (self.requestType) 
{
case MSListRequest:
serverRequestType = @"List";
break;
case MSDetailsRequest:
serverRequestType = @"Details";
break;
case MSPurchaseRequest:
serverRequestType = @"PurchaseVolume";
break;
}

我很好奇是否有比这更简洁的方法来派生字符串。

-编辑:我还在其他地方使用相同的枚举来连接到需要将相同的枚举映射到不同的字符串集的不同系统。

最佳答案

没有真正好的方法可以做到这一点。一个非常简单的方法是创建一个数组:

NSString *const ENUM_NAMES[] = {
@"List", @"Details", @"PurchaseVolume", ...
};

有一些替代方法可以使用宏和一些简单的预处理器技巧从同一来源定义名称和枚举本身。但是,生成的代码更难阅读。

// some_enum.def
X(List),
X(Details),
X(PurchaseVolume)

// some_enum.h
enum {
#define X(x) x
#include "some_enum.def"
#undef X
};

// some_enum.c
char const *const ENUM_STRING[] = {
#define X(x) #x
#include "some_enum.def"
#undef X
};

我不确定从预处理器生成 NSString 的最佳方法,是否可以只在其中插入 @ 还是使用 (NSString *)CFSTR 更好(x).

当我需要一堆这样的代码时,我编写了一个 Python 脚本来从文本文件生成代码——它生成用于将字符串转换为枚举的 GPerf 输出,它还生成用于将枚举转换为字符串的代码.普通的旧 C 不进行反射。

关于objective-c - 从枚举派生字符串的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6798549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com