2014-02-13 58 views
1

我得到了一個分段控制3個選項。我真的不知道如何從selected.segmentedIndex創建一個變量,所以我從另一個地方複製一個方法。枚舉字符串,而不是int

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

如何使這項工作正確的方法是什麼?

非常感謝您

回答

2

The problem is that the last line throws this error: Implicit conversion of tipoServidor (aka enum tipoServidor) to NSString * is disallowed with ARC

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]); 
+0

非常感謝!我試着去想把這個功能DescriptionOfServidor放在哪裏......最後一個提示?哈哈 – user3294339

+0

@ user3294339這取決於你想使用它的地方。如果它位於單個.m文件的本地,則將其放在該文件中,位於您可能具有的任何類的「@ implementation」部分的上方,並在NSString前添加「static」。如果您希望它在多個.m文件中共享,請將其放入您選擇的.m類中,並向聲明瞭「enum」的標頭添加前向聲明。前向聲明如下所示:'NSString * DescriptionOfServidor(tipoServidor e);' – dasblinkenlight

+0

@ user3294339試試看。如果它適合您,請考慮通過點擊旁邊的複選標記來接受答案。 – dasblinkenlight