0

我有一个编码字符串“m8”或“w12”,我想将它们扩展为一个日对象“星期一”或“星期三”和一个时间对象“8:00”或“12:00”。我可以处理但很难找到一种简单的方法(可以在一个块中使用)在Objective-C(iOS)中将'm'变成'Monday'......

我最初想得到第一个字母(总是只有一个字母,然后是 1 或 2 个数字。星期四是“h”。周六和周日不适用)。

[codedString substringToIndex:1]  // returns 'm' or 'w', etc... 

然后使用switch语句将另一个变量设置为“星期一”或“星期二”,然后对数字进行类似的设置。但是,然后我记得你不能switchNSString. 那么如何在 Objective-C 中进行这样的事情呢?

在 Objective-C 和 Ruby 之间来回切换大脑很痛苦,所以我知道我错过了一些明显的东西......

4

5 回答 5

4

看起来像字典的工作!

NSDictionary *stringToDayMap = @{@"m" : @"Monday", @"t" : @"Tuesday", @"w" : @"Wednesday", @"th" : @"Thursday", @"f" : @"Friday", @"s" : @"Saturday"};
NSString *day = [stringToDayMap objectForKey:[codedString substringWithRange:NSMakeRange(0, 1)]]; 
于 2012-11-02T21:21:07.600 回答
2

您可以打开任何 C 原始类型。因此,如果它是一个字母,那么您可以执行以下操作:

switch([codedString characterAtIndex:0])
{
     case 'h': NSLog(@"This is Thursday");
     ... etc ...
}

您将打开 aunichar但它们明确是 ASCII 的超集,因此 C 字符常量“h”将正确映射到 iOS 或 OS X 目标。

于 2012-11-02T21:13:10.740 回答
2

你不能打开一个字符串,但你可以打开一个字符。

switch([codedString characterAtIndex:0]) {
    case 'm': day = @"Monday";  break;
    case 't': day = @"Tuesday"; break;
    ...
}
于 2012-11-02T21:13:12.623 回答
2
NSRange dayRange = [@"smtwhfa" rangeOfString:[codedString substringToIndex:1]];
NSString* dayString = [dayArray objectAtIndex:dayRange.location];

其中 dayArray 是一个预加载了 @"Sunday", @"Monday", ... 的 NSArray

(不知道星期六使用什么单个字符——酌情替换。)

于 2012-11-02T21:18:38.083 回答
0

您可以使用所需的值创建字典。

NSDictionary *daysOfTheWeek = @{@"m": @"Monday", @"t":@"Tuesday"}; // and so on...
于 2012-11-02T21:20:52.420 回答