我有这个函数原型: - (NSString *)formatSQL:(NSString *)sql,... 我可以传递给这个函数任何类型的参数:NSString,NSNumber,integer,float 如何在函数中确定参数是对象(NSString ..)还是基元(整数...)? 谢谢 BrochPirate
答案 0 :(得分:5)
如果您要使用接受多种类型的参数,则只能使用Obj-C对象安全地执行此操作,这意味着使用id
作为类型。您无法安全地将id
与float
,integer
等混合在一起。
如果你将所有float
和int
包裹在NSNumber
中,你可以采用这样的方法:
- (NSString *)formatSQL:(id)obj
{
if ([obj isKindOfClass:[NSString class]]) {
// Format as a string
}
else if ([obj isKindOfClass:[NSNumber class]]) {
// Further processing will be required to differentiate between ints and floats
}
}
使用isKindOfClass:
时有一些注意事项,但这应该是一个很好的起点。