gpt4 book ai didi

objective-c - 参数是 KindOfClass : [NSNumber class] - sane way to check this?

转载 作者:太空狗 更新时间:2023-10-30 03:49:07 25 4
gpt4 key购买 nike

所以我在玩一些直到运行时才知道 arg 的类类型的东西。像这样:

- (NSNumber *)doWhatever:(id)arg
{
// this ALWAYS FAILS
if ([arg isKindOfClass:[NSNumber class]]) {
return arg;
}
else {
// what was it???
NSLog("arg klass=%@", [arg class]); // prints NSCFNumber
}

// This check works correctly.
if ([arg isKindOfClass:[NSArray class]]) {
for (id x in arg) {
NSNumber *result = [self doWhatever:x];
if (result) {
return result;
}
}
}
return nil;
}

- (void)someMethod
{
NSArray *myArray = [NSArray arrayFromObjects:[NSNumber numberWithInt:3], nil]];
NSNumber *myNum = [self doWhatever:myArray];
NSLog(@"myNum=%@", myNum);
}

这显然是我想做的一个人为的例子。关键是这永远行不通,因为“arg”类总是显示为 NSCFNumber,我想不出一种方法来检查它。

有什么方法可以减少检测数组中的任意值是否为整数的混淆?


更新:感谢@chuck、@omz 和@Nikita Leonov 的帮助。我最初在这里发布的只是对我遇到的问题的简化,并在没有先运行它的情况下写在这里。该代码一旦更新以消除错误(见下文)实际上运行良好。

我在实际代码中遇到的错误同样愚蠢——我将数组传回“doWhatever”而不是数组索引处的项目,这就是我遇到问题的原因。

感谢您尝试提供帮助,但我的问题被误导了。抱歉浪费了大家的时间!

按需要运行的更正代码:


- (NSNumber *)doWhatever:(id)arg
{
// this NOW WORKS
if ([arg isKindOfClass:[NSNumber class]]) {
return arg;
}
else {
// what was it???
NSLog(@"arg klass=%@", [arg class]); // prints NSCFNumber
}

// This check works correctly.
if ([arg isKindOfClass:[NSArray class]]) {
for (id x in arg) {
NSNumber *result = [self doWhatever:x];
if (result) {
return result;
}
}
}
return nil;
}

- (void)someMethod
{
NSArray *myArray = [NSArray arrayWithObjects:
[NSNumber numberWithInt:1],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:4],
nil];
NSNumber *myNum = [self doWhatever:myArray];
NSLog(@"myNum=%@", myNum);
}

最佳答案

NSCFNumber 是 NSNumber 的子类。只要您使用的是 isKindOfClass: 而不是 isMemberOfClass:[arg class] == [NSNumber class],它就应该可以工作。如果不是,则您的问题出在其他地方。

关于objective-c - 参数是 KindOfClass : [NSNumber class] - sane way to check this?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com