【问题标题】:Return 1st from 1, 2nd from 2, ..., 11th from 11,从 1 返回第 1,从 2 返回第 2,...,从 11 返回第 11,
【发布时间】:2012-09-05 09:31:45
【问题描述】:

是否有一个 Objective-c 函数可以从 NSUInteger 返回 NSString *,即:

  • 1 -> 第一
  • 2 -> 第二个
  • ...
  • 10 -> 10
  • 21 -> 21 日
  • ...
  • 31 -> 31 日

从 1 到 31 的范围。谢谢!

【问题讨论】:

    标签: iphone cocoa-touch


    【解决方案1】:
    - (NSString *)stringFromInt:(int)num {
        NSString stringAddition;
        if (num%100 >= 11 && num%100 <= 13) {
            stringAddition = @"th";
        }
        else {
            switch (num % 10) {
                case 1: stringAddition = @"st"; break;
                case 2: stringAddition = @"nd"; break;
                case 3: stringAddition = @"rd"; break;
                default: stringAddition = @"th"; break;
            }
        }
        return [NSString stringWithFormat:@"%i%@", num, stringAddition];
    }
    

    编辑
    修复了 11、12、13 的问题。

    【讨论】:

    • 你说返回“11st”工作? “十二号”? “十三号”? “31st”很好,但“11st”是纯粹的破损。如果您真的要涵盖所有基础,那么这些特殊情况可能应该有自己的if() 声明。另外我更希望这个方法被称为“ordinalFromInt”,而不是“stringFromInt”——这个名字并没有告诉我我们正在添加任何东西,我希望它是[NSString stringWithFormat:@"%d", num]的简写。跨度>
    • 你只需要多一点,就在回报之上:if(num &gt;= 11 &amp;&amp; num &lt;= 13) stringAddition = @"th";
    • 在设计方面,这样的代码可能最适合 NSNumberFormatter 子类。
    • 上面的代码会在 113、213、1013 等处中断,不是吗?我建议检查 if (num%100 >=11 && num%100
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2020-06-09
    • 2023-03-31
    相关资源
    最近更新 更多