【问题标题】:Objective-C formatting string for boolean?布尔值的Objective-C格式化字符串?
【发布时间】:2011-02-05 22:09:58
【问题描述】:

布尔值使用什么格式化程序?

编辑:

例如:NSLog(@" ??", BOOL_VAL);?? 是什么?

【问题讨论】:

    标签: objective-c string nsstring string-formatting


    【解决方案1】:

    一种方法是转换为字符串(因为只有两种可能,这并不难):

    NSLog(@" %s", BOOL_VAL ? "true" : "false");
    

    我认为布尔值没有格式说明符。

    【讨论】:

    • 输出字符串不应该是:“是”和“否”:P
    • 或“蛋糕”和“没有蛋糕”。什么都适合你。
    • 我爱蛋糕,不爱蛋糕!我将立即将我所有的 x?@"YES":@"NO" 代码替换为 x?@"Cake":@"No Cake" :D ——好吧,至少对于我的对象描述而言;)跨度>
    • 或者 TheCakeIsALie 和 TheCakeIsNotALie。
    • %hhd 是将布尔值显示为整数标志的正确方法 0 或 1 。 0 为假 1 为真。
    【解决方案2】:

    我会推荐

    NSLog(@"%@", boolValue ? @"YES" : @"NO");
    

    因为,嗯,BOOLs 在 Objective-C 中被称为 YESNO

    【讨论】:

    • 对于宏或函数来说,这似乎是一个明显的实用点(如果只是为了避免在整个应用程序中传播字符串文字)。
    • 只有你真的不需要避免这种字符串的“传播”——因为 ObjC 合并了不可变字符串(和其他对象)的相同值的实例——这样只有一个副本驻留在内存中。宏可以,功能可以,复制粘贴也可以。
    【解决方案3】:

    在 Objective-C 中,BOOL 类型只是一个有符号字符。来自<objc/objc.h>

    typedef signed char BOOL;
    #define YES         (BOOL)1
    #define NO          (BOOL)0
    

    因此您可以使用%d 格式化程序打印它们,但这只会打印10,而不是YESNO

    或者您可以只使用一个字符串,如其他答案中所建议的那样。

    【讨论】:

    • 不会 %c 尝试打印 ASCII 字符 0 或 1 两者都是控制字符吗?
    【解决方案4】:

    这里记录了用于 NSLog 和 [NSString stringWithFormat] 的格式字符串:

    http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

    BOOL/bool/boolean 甚至都没有被提及...

    【讨论】:

    • 这在苹果开发网站上隐藏得很好。
    【解决方案5】:

    使用整数格式化程序%d,它将打印01

    NSLog(@"%d", myBool);
    

    【讨论】:

      【解决方案6】:

      将此内联函数添加到您的 .h 文件中:

      static inline NSString* NSStringFromBOOL(BOOL aBool) {
          return aBool? @"YES" : @"NO";
      }
      

      现在你准备好了……

      NSLog(@"%@", NSStringFromBOOL(BOOL_VAL));
      

      【讨论】:

        【解决方案7】:

        只需添加以下函数并将BOOL 值传递给它,方法将返回NSString

        - (NSString *)boolValueToString:(BOOL)theBool {
            if (theBool == 0)
                return @"NO"; // can change to No, NOOOOO, etc
            else
                return @"YES"; // can change to YEAH, Yes, YESSSSS etc
        }
        

        【讨论】:

          【解决方案8】:

          我用这个创建了一个NSString的类别

          + (instancetype)stringWithBool:(BOOL)boolValue {
          return boolValue ? @"YES" : @"NO";
          }
          

          并像这样使用它:

          [NSString stringWithBool:boolValue];
          

          【讨论】:

            【解决方案9】:

            我认为最简单的方法是:

            NSLog(@" %@", @(BOOL_VAL));
            

            @(表达式)

            动态评估装箱表达式并根据其值返回适当的对象字面量(即 NSString 用于 const char*,NSNumber 用于 int 等)。

            【讨论】:

            • 是的,它会相应地将 Bool 转换为 1 和 0。谢谢。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-07
            • 1970-01-01
            相关资源
            最近更新 更多