問題描述
我在標有故障線"的行處收到錯誤ARC 不允許將 'int' 隱式轉換為 'id'".我想這與我正在檢查數組中的整數有關,該數組包含對象而不是整數.
I i'm getting the error "Implicit conversion of 'int' to 'id' is disallowed with ARC" at the line marked with "faulty line". I guess it have something to do with that i'm checking for an integer in an array, that contains objects instead of integers.
#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 或任何其他原始類型.
NSArrays can only contain objective-c objects. So actually the method containsObject: is expecting an object, not an int or any other primitive type.
如果你想在 NSArray 中存儲數字,你應該將它們打包到 NSNumber 對象中.
If you want to store number inside an NSArray you should pack them into NSNumber objects.
NSNumber *someNumber = [NSNumber numberWithInt:3];
在您的情況下,如果我們假設 drawNumbers 已經是一個 NSNumbers 數組,您應該將 randomNumber: 代更改為:
In your case, if we assume that drawnNumbers is already an array of NSNumbers, you should change the randomNumber: generation to:
-(NSNumber*) randomNumber:(int)upperNumber {
return [NSNumber numberWithInt:arc4random_uniform(upperNumber)];
}
然后在 lotteryNumbers 方法中選擇它時,您應該:
And then when picking it up on the lotteryNumbers method, you should:
NSNumber *drawnNumber = [self randomNumber:andHighestNumber];
另一個注意事項是您為 lotteryNumbers 定義的方法.你用了一個很奇怪的名字,我想你誤解了方法命名在objective-c中是如何工作的.您可能正在尋找類似的東西:
Another note would go for the method you defined for lotteryNumbers. You used a really strange name for it, I think you misunderstood how the method naming works in objective-c. You were probably looking for something more like:
-(NSMutableArray*) lotteryNumbersWithMaximumDrawnNumbers:(int)maximumDrawnNumbers andHighestNumber:(int)highestNumber;
后期
Objective-C 現在允許使用更緊湊的語法來創建 NSNumber.你可以這樣做:
Objective-C now allows a way more compact syntax for creating NSNumbers. You can do it like:
NSNumber *someNumber = @(3);
你的方法可以改寫為:
-(NSNumber*) randomNumber:(int)upperNumber {
return @(arc4random_uniform(upperNumber));
}
這篇關于在目標 C 中進行比較 - ARC 不允許將“int"隱式轉換為“id"的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!