【问题标题】:Objective-C (iOS/Cocoa): expand first letter into day of weekObjective-C(iOS / Cocoa):将第一个字母扩展到星期几
【发布时间】:2012-11-02 21:09:00
【问题描述】:

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

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

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

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

在 Objective-C 和 Ruby 之间来回切换会伤脑筋,所以我知道我遗漏了一些明显的东西......

【问题讨论】:

  • 好主意(下)!这就是我喜欢 SO...我一直在寻找一种我无法想到的解决方案,现在我知道至少 3 种不同的方法...非常感谢!

标签: objective-c ios cocoa switch-statement


【解决方案1】:

看起来像字典的工作!

NSDictionary *stringToDayMap = @{@"m" : @"Monday", @"t" : @"Tuesday", @"w" : @"Wednesday", @"th" : @"Thursday", @"f" : @"Friday", @"s" : @"Saturday"};
NSString *day = [stringToDayMap objectForKey:[codedString substringWithRange:NSMakeRange(0, 1)]]; 

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      switch([codedString characterAtIndex:0]) {
          case 'm': day = @"Monday";  break;
          case 't': day = @"Tuesday"; break;
          ...
      }
      

      【讨论】:

        【解决方案4】:
        NSRange dayRange = [@"smtwhfa" rangeOfString:[codedString substringToIndex:1]];
        NSString* dayString = [dayArray objectAtIndex:dayRange.location];
        

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

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

        【讨论】:

        • 如果您想真正彻底,您甚至可以从NSDateFormatter 获取星期几的名称,这只是涉及合适的日期字符串和您知道的日期的重大努力在特定的日子,因为“星期几的名称”的简单 getter 将使用用户的语言环境来决定哪一天是一周的第一天(例如,根据文化规范,在美国是星期天,但在英国是星期一) .
        • @Tommy -- 是的,有很多方法可以做到这一点。如果您不介意设置成本,那么字典方案可能是最直接的。或者简单的switch。但我喜欢思考不同的方式。
        【解决方案5】:

        你可以用你想要的值创建一个字典。

        NSDictionary *daysOfTheWeek = @{@"m": @"Monday", @"t":@"Tuesday"}; // and so on...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-06
          • 1970-01-01
          • 2013-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多