我收到错误“在”错误行“标记的行处”不允许将“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
答案 0 :(得分:35)
NSArrays只能包含objective-c对象。所以实际上方法 containsObject:期望一个对象,而不是int或任何其他原始类型。
如果您想在NSArray中存储号码,您应该将它们打包到 NSNumber 对象中。
NSNumber *someNumber = [NSNumber numberWithInt:3];
在您的情况下,如果我们假设drawnNumbers已经是NSNumbers的数组,您应该将 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现在允许使用更紧凑的语法来创建NSNumbers。你可以这样做:
NSNumber *someNumber = @(3);
您的方法可以改写为:
-(NSNumber*) randomNumber:(int)upperNumber {
return @(arc4random_uniform(upperNumber));
}
答案 1 :(得分:6)
您正在使用int
,其中需要一个对象(可能是NSNumber
)。所以在使用前转换:
if ([drawnNumbers containsObject:@( drawnNumber )])