创建一个参数接受 NSString 或 int 的方法

Creating a method with parameter that accepts NSString or int

正在尝试创建一个只有一个参数的方法,该参数可以接受 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...
}

我就是这样调用这个方法的:

如果传递整数:

[self LocalizeNumber:(void*)150];

如果传递 NSString:

[self LocalizeNumber:@"150"];

问题是我仍然不知道如何知道参数 "TheNumber" 是 NSString 还是 int。

谢谢。

虽然我建议您重新考虑您的方法,但您的目标可以通过以下方式实现:

- (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)];

您无法区分对象类型和普通基元。但是,如果您传递一个 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...
}

您可以使用类别将 -stringValue 添加到 NSString:

@implementation NSString (LocalizedNumber)
-(NSString*)stringValue
{
    return self ;
}
@end

那么您可以拨打:

NSString * localizedNumber = [<number or string object> stringValue]

没有安全的方法来区分 intNSString 引用。