使用接受NSString或int的参数创建方法

时间:2015-01-03 23:40:36

标签: objective-c

尝试创建一个只包含一个可以接受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。

谢谢。

3 个答案:

答案 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