ios - 在 Objective-C 中进行比较 - 使用 ARC 不允许将 'int' 隐式转换为 'id'

标签 ios iphone objective-c casting type-conversion

我在标有“faulty line”的行收到错误消息“ARC 不允许将‘int’隐式转换为‘id’”。我猜这与我正在检查数组中的整数有关,该数组包含对象而不是整数。

#import "RandomGenerator.h"

@implementation RandomGenerator

NSMutableArray *drawnNumbers;

-(int) randomNumber:(int)upperNumber {
    return arc4random_uniform(upperNumber);
}

-(NSMutableArray*) lotteryNumbers :(int)withMaximumDrawnNumbers :(int)andHighestNumber {
    for (int i = 1; i <= withMaximumDrawnNumbers; i++)
    {
        int drawnNumber = [self randomNumber:andHighestNumber];
        if ([drawnNumbers containsObject:drawnNumber]) {  //faulty line
            //foo
        }
    }
    return drawnNumbers;
}

@end

最佳答案

NSArrays 只能包含 objective-c 对象。所以实际上 containsObject: 方法需要一个对象,而不是 int 或任何其他基本类型。

如果你想在 NSArray 中存储数字,你应该将它们打包到 NSNumber 对象中。

NSNumber *someNumber = [NSNumber numberWithInt:3];

在您的情况下,如果我们假设 drawnNumbers 已经是一个 NSNumber 数组,您应该将 randomNumber: 生成更改为:

-(NSNumber*) randomNumber:(int)upperNumber {
    return [NSNumber numberWithInt:arc4random_uniform(upperNumber)];
}

然后在 lotteryNumbers 方法上提取它时,您应该:

NSNumber *drawnNumber = [self randomNumber:andHighestNumber];

另一个注释将用于您为 lotteryNumbers 定义的方法。你为它使用了一个非常奇怪的名字,我想你误解了方法命名在 objective-c 中的工作方式。您可能正在寻找更像的东西:

-(NSMutableArray*) lotteryNumbersWithMaximumDrawnNumbers:(int)maximumDrawnNumbers andHighestNumber:(int)highestNumber;

后期编辑:

Objective-C 现在允许使用更紧凑的语法来创建 NSNumber。你可以这样做:

NSNumber *someNumber = @(3);

您的方法可以重写为:

-(NSNumber*) randomNumber:(int)upperNumber {
    return @(arc4random_uniform(upperNumber));
}

关于ios - 在 Objective-C 中进行比较 - 使用 ARC 不允许将 'int' 隐式转换为 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21603609/

相关文章:

iOS-Charts 分组条形图,大小适合

ios - 使用tableview时如何删除安全区域?

iPhone - 如何测量 PCM 编码信号的幅度

objective-c - 将 Objective-C 终端应用程序从 Mac OS X 移植到 Linux?

iphone - MobileSafari 上页面标题的字体系列是什么?

ios - 链接器命令无法在 ios 中执行代码 1(使用 -v 查看调用)

ios - 从 NSData 中检索 SecKey

iPhone 使用 svg 忽略背景位置

iphone - JSON 值未保存到 iPhone 中的 SQLite 数据库

ios - 如何从 UIViewController 类调用方法到自定义 UIView 类