学过许多的编程语言,无一例外都拥有Boolean类型,而objective C也不例外。
C语言中拥有布尔数据类型bool,它具有true值和false值。Objective C提供相似的类型Bool,它具有YES值和NO值。比较有趣的事情就是, Objective C的布尔类型比C语言的布尔类型早诞生10多年。这两种不同的布尔类型可以共同一个程序中共存,但在编写Cocoa代码时要使用Bool。
要注意的地方是:Objective C中的BOOL实际上是一种对带符号的字符串(singed char)类型的定义(typedef),它使用8位存储空间。YES定义为1,而NO定义为0(使用#define)。
由于Objective C并不将Bool作为仅能保存YES or NO值得真正的布尔类型来处理。编译器将BOOL认做8为二进制数,YES 和 NO值只是一种约定。这会引发一个小问题,不过不小心把一个长于1字节的整形复制给BOOL变量,那么只有低位作BOOL值。
来吧,接着来点干货,关于BOOL的使用功能例子;
#import <Foundation/Foundation.h>
BOOL areIntDifferent(int thing1, int thing2){
if( thing1 == thing2){
return (NO);
}else{
return (YES);
}
}
NSSTRING *boolString(BOOL yesNo){
if(yesNo == NO){
return (@"NO");
}else{
return (@"YES");
}
}
int main(int argc, const char *argv[]){
BOOL areTheyDifferent;
areTheyDifferent = areIntDifferent(5, 5);
NSLog(@"are %d and %d different? %@", 5 , 5, boolString(areTheyDifferent);
areTheyDifferent = areIntDifferent(23, 42);
NSLog(@"are %d and %d different? %@", 23, 42, boolString(areTheyDifferent));
return (0);
}
运行结果:
are 5 and 5 different ? NO
are 23 and 24 different ? YES
需要注意的地方:
作为一个丰富经验的C语言开发者来说,往往将areIntsDifferent()函数简写为:
BOOL areIntDifferent(int thing1, int thing2){
return (thing1 - thing2);
}
在C语言中非0的值都返回YES,但objective C中1是不等于YES的
还有一个问题%d我们固然比较熟悉,但“%@"它的含义是什么,它表示boolString()返回一个NSString的指针。