为什么我可以将BOOL传递给需要NSInteger参数的方法?

时间:2015-05-13 19:50:52

标签: cocoa xcode6

为什么我可以声明/定义这样的方法:

@interface Dog : NSObject

- (void) doStuff:(NSInteger)val;

@end

...

@implementation Dog

- (void) doStuff:(NSInteger)val {

    NSLog(@"arg was valid");

}

@end

......并且这样称呼它:

Dog* mydog = [[Dog alloc] init];
[mydog doStuff:YES];  //=>arg was valid

我读过BOOL是签名字符的typedef。通常在Xcode6中,如果类型不完全匹配,我会收到各种警告,告诉我强制转换为正确的类型,如果点击正确的位置,Xcode会为我插入强制转换。

1 个答案:

答案 0 :(得分:1)

在C语言系列中 - (目标 - )C(++) - 各种布尔类型(BOOLbool_Bool)都被归类为整数类型。 (char也是整数类型。)

使用较小的整数类型,其中需要较大的整数类型是隐式转换,不需要强制转换。

结合使用这些内容,您可以将BOOL作为NSInteger传递。

HTH