【问题标题】:Enum strings instead of int枚举字符串而不是 int
【发布时间】:2014-02-13 19:25:55
【问题描述】:

我有一个带有 3 个选项的分段控件。我真的不知道如何从selected.segmentedIndex 创建一个变量,所以我从另一个地方复制了一个方法。

typedef NS_ENUM(int, tipoServidor) {
SERVIDOR_ARG = 1,
SERVIDOR_EU = 2,
SERVIDOR_US = 3};
@property (nonatomic) tipoServidor servidorType;

<Another file>
if (self.persistentSettings.servidorType == SERVIDOR_ARG){
    self.servidorControl.selectedSegmentIndex= 0;
} else if (self.persistentSettings.servidorType == SERVIDOR_EU) {
    self.servidorControl.selectedSegmentIndex= 1;
} else if (self.persistentSettings.servidorType == SERVIDOR_US) {
    self.servidorControl.selectedSegmentIndex = 2;}

<Another file>
- (NSString *)servidorType {
AdSettings *settings = [[AdSettings alloc] init];

NSString *server = [settings servidorType];

问题是最后一行抛出这个错误:

Implicit conversion of 'tipoServidor' (aka 'enum tipoServidor') to 'NSString *' is disallowed with ARC

如何正确完成这项工作?

非常感谢

【问题讨论】:

    标签: ios objective-c enums uisegmentedcontrol


    【解决方案1】:

    问题是最后一行抛出此错误:ARC 不允许将 tipoServidor (aka enum tipoServidor) 隐式转换为 NSString *

    ARC 与否,enum 不是NSString,所以你不能这样做。为了处理它,要么定义一个代表你的enum 值的字符串数组,要么编写一个执行映射的小函数,例如,像这样:

    NSString *DescriptionOfServidor(tipoServidor e) {
        switch (e) {
            case SERVIDOR_ARG: return @"SERVIDOR_ARG";
            case SERVIDOR_EU: return @"SERVIDOR_EU";
            case SERVIDOR_US: return @"SERVIDOR_US";
        }
        return nil;
    }
    

    你现在只需要这个调用:

    NSString *server = DescriptionOfServidor([settings servidorType]);
    

    【讨论】:

    • 非常感谢!我试着想把那个函数DescriptionOfServidor放在哪里......最后的提示?哈哈
    • @user3294339 这取决于你想在哪里使用它。如果它是单个 .m 文件的本地文件,请将其放在该文件中,在您可能拥有的任何类的 @implementation 部分上方,并在 NSString 前面添加 static。如果您希望它在多个 .m 文件之间共享,请将其放在您选择的 .m 类中,并在声明 enum 的标头中添加前向声明。前向声明如下所示:NSString *DescriptionOfServidor(tipoServidor e);
    • @user3294339 试试这个。如果它适合您,请考虑通过单击旁边的复选标记来接受答案。
    • 对不起,忽略最后一个问题
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2012-09-05
    • 2011-05-20
    • 2011-01-04
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多