【问题标题】:Enum, PList or some other storage?枚举、PList 或其他一些存储?
【发布时间】:2011-11-17 15:52:21
【问题描述】:

iOS 5.0 SDK

我有一个将参数作为我定义的“类型”的方法。让我们称之为“地方”。该类型定义如下:

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

我的方法将采用 Places 参数。

根据传入的 Place 类型,我会将类型附加到 url:

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

但是,url 参数不能是数字,它必须是字符串。

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

我知道枚举不能是字符串,所以我试图找出正确的方法。我有一个 plist,然后将 plist 读入字典吗?还有其他方法吗?

【问题讨论】:

  • 您已经自己回答了您的问题 - 最好的选择是创建一个字典(在代码中或在 plist 中),其中包含支持的字符串和来自您的枚举的相应键

标签: ios iphone enums storage


【解决方案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

注意,我还没有测试过代码。

【讨论】:

  • 我实际上是走这条路线而不是功能。感谢您的信息。
  • 从现在开始我会选择 typedef NS_ENUM(..., ...) {...},因为我们不知道 PlaceType 是否根本不打算在任何 Swift 代码中使用 - 否则命名约定看起来不错。跨度>
【解决方案2】:

您可以采取许多不同的方法。以下是我自己可能会做的事情。

假设存在有限且已知数量的值,您可以执行一个简单的函数来返回给定类型的字符串:

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

除非您想要动态值等灵活性,否则不需要对象或类。

【讨论】:

  • 这实际上是我要去的地方,但不知道是否还有其他选择。是的,地方的数量是有限的。
  • 有很多可能的解决方案,它们取决于值在编译时已知的事实,如果你希望它们改变等等......如果在编译时知道值,而你不知道不要指望他们会改变,我会选择这个功能。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多