尝试创建一个只包含一个可以接受NSString或int的参数的方法。
这是我到目前为止所做的:
-(NSString*)LocalizeNumber:(void*)TheNumber{
BOOL IsVarInt = false;
NSString * Num = "";
if(IsVarInt){
Num = [NSString stringWithFormat:@"%i",(int)TheNumber];
}else{
Num = [NSString stringWithFormat:@"%@",(__bridge NSString*)TheNumber];
}
//rest of code...
}
这就是我称之为这种方法的方式:
如果传递int:
[self LocalizeNumber:(void*)150];
如果传递NSString:
[self LocalizeNumber:@"150"];
问题是我仍然不知道如何知道参数" TheNumber"是NSString或int。
谢谢。
答案 0 :(得分:3)
虽然我建议您重新考虑您的方法,但您的目标可以实现如下:
- (NSString *)localizeNumber:(id)number {
NSString *num = nil;
if ([number isKindOfClass:[NSNumber class]]) {
num = [number stringValue];
} else if ([number isKindOfClass:[NSString class]]) {
num = number;
} else {
// oops - bad value
}
// rest of code using num
}
然后你可以按如下方式调用方法:
NSString *someString = @"Hello";
NSString *result = [self localizeNumber:someString];
或:
int someInt = 42;
NSString *result = [self localizeNumber:@(someInt)];
答案 1 :(得分:1)
您无法区分对象类型和普通基元。但是,如果传递int
传递给NSNumber
包装器,则可以轻松判断两种对象类型,如下所示:
-(NSString*)LocalizeNumber:(id)TheNumber {
NSString *Num = @"";
if ([TheNumber isKindOfClass:[NSSTRING class]]) {
Num = [NSString stringWithFormat:@"%@", TheNumber];
} else if ([TheNumber isKindOfClass:[NSNumber class]]) {
Num = [NSString stringWithFormat:@"%i",[TheNumber intValue]];
}
//rest of code...
}
答案 2 :(得分:-2)
您可以使用类别将 -stringValue 添加到 NSString :
@implementation NSString (LocalizedNumber)
-(NSString*)stringValue
{
return self ;
}
@end
然后你可以打电话:
NSString * localizedNumber = [<number or string object> stringValue]
没有一种安全的方法可以从 NSString 引用中告诉 int 。