2011-11-17 89 views
0

iOS 5.0 SDKEnum,PList或其他存储?

我有一个方法,把一个参数作为我定义的“类型”。让我们称之为'地方'。这种类型定义如下:

typedef enum { 
    kBar = 0, 
    kRestaurant = 1, 
    kCafe = 2 
} Places 

我的方法将采用地方的参数。

根据传入的地方类型,我会类型追加到URL:

例如:http://www.domain.com/place=1

然而,网址参数不能是一个数字它必须是一个字符串。

例如:http://www.domain.com/place=restaurant

我知道枚举不能是字符串,所以我试图找出这是正确的做法。我有一个plist,然后把plist读成字典吗?有另一种方法吗?

+0

你自己回答了你的问题 - 最好的选择是创建一个字典(在代码或plist中)与支持的字符串和相应的键从你的枚举 – Denis

回答

1

我会做这样的事情:

typedef enum { 
    PlaceTypeBar = 0, 
    PlaceTypeRestaurant = 1, 
    PlaceTypeCafe = 2 
} PlaceType 


@interface PlaceTypeHelper : NSObject 
    + (NSString *) stringForPlace:(PlaceType)place; 
@end 

@implementation 

+ (NSString *) stringForPlace:(PlaceType)place { 
    NSArray *places = [NSArray arrayWithobjects:@"Bar", @"Restaurant", @"Cafe", nil]; 

    return [places objectForKey:(NSInteger)place]; 
} 

@end 

Headups,我没有测试的代码呢。

+0

我其实走了这条路线,而不是功能。谢谢(你的)信息。 – jdruid

+0

因为我们不知道'PlaceType'是否打算用在任何Swift代码中,所以我会去'typedef NS_ENUM(...,...){...}',否则命名约定看起来没问题。 – holex

0

你可以采取很多不同的方法。以下是我可以自己做的事情。

假设有值的有限和已知量,你可以做一个简单的函数返回给定类型的字符串:

(NSString*) StringForPlaceType(PlaceType thePlace) { 
    switch(thePlace) { 
    case kBar: 
     return @"Bar"; 
    case kRestaurant: 
     return @"Restaurant"; 
    case kCafe: 
     return @"Cafe"; 
    default: 
     // ... 
    } 
} 

无需对象或类,除非你想要的灵活性,例如,动态值等。

+0

这实际上是我前往的地方,但不知道是否还有其他选择。是的,有一些有限的地方。 – jdruid

+0

有很多可能的解决方案,它们取决于编译时已知的值,如果你期望它们改变等等......如果在编译时知道值,并且你不希望它们改变,我会去做这个功能。祝你好运! – 2011-11-17 16:35:53