我使用了下面的typedef枚举,但是开关总是返回默认情况?
typedef enum {
first,
LatestNews,
Opinion,
Special,
Sports,
Thisweek,
} NAChannelTitle;
-(NSString *)getImageName:(NSString *)channelName {
NAChannelTitle temp = (NAChannelTitle)[channelName stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"Temp : %@",temp);
switch (temp) {
case first:
return @"background-channel-sporttitle-portrait.png";
break;
case LatestNews:
return @"background-channel-title-portrait.png";
break;
case Opinion:
return @"background-channel-title-portrait.png";
break;
case Special:
return @"background-channel-sporttitle-portrait.png";
break;
case Sports:
return @"background-channel-sporttitle-portrait.png";
break;
case Thisweek:
default:
return @"background-channel-title-portrait.png";
break;
}
return nil;
}
答案 0 :(得分:3)
你不能将字符串转换为枚举,因为枚举名称没有保存,相反,你可以通过比较字符串创建一个函数,这样做的时间更长,但我不认为你有其他选择。宏可能会有所帮助:
NAChannelTitle getEnumTitle(NSString *sTitle) {
#define CHECK_ENUM(X) if([sTitle isEqualToString:@#X]) return X
CHECK_ENUM(first);
// the same for all enum
return defaultEnum; // add this to the enum
#undef CHECK_ENUM
}
然后你可以这样做:
NAChannelTitle temp = getEnumTitle(channelName);
NSLog(@"Temp : %d",temp);
switch (temp) {
case first:
return @"background-channel-sporttitle-portrait.png";
break;
case LatestNews:
return @"background-channel-title-portrait.png";
break;
case Opinion:
return @"background-channel-title-portrait.png";
break;
case Special:
return @"background-channel-sporttitle-portrait.png";
break;
case Sports:
return @"background-channel-sporttitle-portrait.png";
break;
case Thisweek:
default:
return @"background-channel-title-portrait.png";
break;
}
return nil;
答案 1 :(得分:2)
这是人们在寻找的东西。这是没有任何字符串比较的最短答案:
// Zoey.h
typedef enum {
turnLeft,
turnRight,
turnTop,
turnBottom
} arrowType;
// Zoey.m
NSString * const arrowTypeTypeArray[] = {
@"turnLeft",
@"turnRight",
@"turnTop",
@"turnBottom"
};
// A method to convert an enum to string.is it short enuff eh ?
-(NSString*) arrowTypeEnumToString:(arrowType)enumVal
{
return arrowTypeArray[enumVal];
}
// An extra method to retrieve the int value from the C array of NSStrings
-(arrowType) arrowTypeStringToEnum:(NSString*)strVal
{
int retVal;
for(int i=0; i < sizeof(arrowTypeArray)-1; i++)
{
if([(NSString*)arrowTypeArray[i] isEqual:strVal])
{
retVal = i;
break;
}
}
return (arrowType)retVal;
}
答案 2 :(得分:1)
您将字符串转换为枚举,但这不起作用。字符串是指针,枚举是数字,即使你可以转换它们,指针也不会有相同的值。 你需要这样的东西:
if([temp isEqualToString:@"LatestNews"]){ ... }
等等。或者转换为枚举的一些方法,然后您可以打开它。 那些break语句也没用了
答案 3 :(得分:0)
枚举,代表枚举 - 您只是为某些整数创建名称。
typedef enum {
first,
LatestNews,
Opinion,
Special,
Sports,
Thisweek,
} NAChannelTitle;
表示第一个为0, LatestNews 为1,依此类推。
在你的函数中,你将NSString转换为NSInteger - 因此你没有得到正确的值。
您需要使用[string isEqualToString:]
方法将字符串与某些条件值进行比较。