簡體   English   中英

枚舉字符串而不是int

[英]Enum strings instead of int

我有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

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

非常感謝你

問題是最后一行拋出此錯誤: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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM