在Objective c中如何定义自定义布尔类型?

时间:2013-09-04 09:59:22

标签: objective-c c boolean

typedef signed char BOOL; 
// BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" 
// even if -funsigned-char is used.

#if __has_feature(objc_bool)
#define YES __objc_yes
#define NO  __objc_no
#else
#define YES ((BOOL)1)
#define NO  ((BOOL)0)
#endif

以上是iOS中如何定义BOOL。按照相同的方式,我试图定义另一个值为ON OFF的布尔值,如下所示。

typedef signed char ONOFF;

#if __has_feature(objc_bool)
#define ON __objc_yes
#define OFF  __objc_no
#else
#define ON ((ONOFF)1)
#define OFF  ((ONOFF)0)
#endif

当此类型定义为参数autocompletion时,将其写为'int'而不是'ONOFF'。但对于BOOL类型,它正确地将其写为'BOOL'。

是否可以创建我的自定义布尔类型,其工作方式与BOOL在所有方面类似?

对于某些属性,ON / OFF的可读性会更好,因此尝试上述操作。

有什么建议吗?

修改

使用ON / OFF代替YES / NO的快速解决方法是

typedef YES ON;
typedef NO OFF;

但仍然想知道为什么我不能创建自己的布尔类型。

1 个答案:

答案 0 :(得分:2)

保持简单?

typedef BOOL ONOFF;
#define ON YES
#define OFF NO