创建一个参数接受 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]
没有安全的方法来区分 int 和 NSString 引用。
正在尝试创建一个只有一个参数的方法,该参数可以接受 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]
没有安全的方法来区分 int 和 NSString 引用。