枚举字符串而不是int

时间:2014-02-13 19:25:55

标签: ios objective-c enums uisegmentedcontrol

我有一个带有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

如何使这项工作正确?

非常感谢

1 个答案:

答案 0 :(得分:2)

  

问题是最后一行会引发此错误:ARC不允许将tipoServidor(又名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]);