为什么我可以声明/定义这样的方法:
@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会为我插入强制转换。
答案 0 :(得分:1)
在C语言系列中 - (目标 - )C(++) - 各种布尔类型(BOOL
,bool
,_Bool
)都被归类为整数类型。 (char
也是整数类型。)
使用较小的整数类型,其中需要较大的整数类型是隐式转换,不需要强制转换。
结合使用这些内容,您可以将BOOL
作为NSInteger
传递。
HTH