我收到此错误
对二进制表达式的无效操作(' float'和' id')
NSMutableArray *redValues = [NSMutableArray array];
NSUInteger *redValuesLength = [redValues count];
NSMutableArray *arrayOne = [NSMutableArray array];
NSInteger j;
float diffForAverage, totalOne;
__block int counter = 0;
float average = totalOne / amount;
int amount = 1;
for (j = (counter + 25); j < (redValuesLength - 25); j++)
{
diffForAverage = average - redValues[j + 1]; // error occurs here
if (diffForAverage > -1 && diffForAverage < 1)
{
totalOne += redValues[j + 1]; // error occurs here
amount++;
[arrayOne addObject:[NSNumber numberWithInt:(j - 25)]];
counter++;
}
}
我该如何解决这个问题?
答案 0 :(得分:3)
发布问题时请不要重新输入错误消息(或代码)。 复制并粘贴。否则你会犯错误。您可以从问题导航器中复制Xcode错误消息。默认快捷方式:⌘4。
实际的错误消息是
二进制表达式的无效操作数('float'和'id')
问题是redValues
是NSMutableArray
,因此其元素是对象(如NSObject
),而非原始数字(如float
和int
)。 id
类型是“对象标识”,可以引用任何Objective-C对象,甚至是那些不是NSObject
实例的(非常罕见的)对象。
您无法将float
添加到对象引用,也无法在NSMutableArray
中存储原始数字。
您已经了解了NSNumber
包装器对象,因为您稍后会在代码中创建一个。您需要在NSNumber
中存储redValues
个实例。也许你已经这样做了。然后,当您从NSNumber
返回redValues
时,您需要将其转回float
进行数学运算,如下所示:
diffForAverage = average - [redValues[j + 1] floatValue]; // error occurs here
如果您声明NSMutableArray
喜欢
NSMutableArray<NSNumber *> *redValues = [NSMutableArray array];
然后编译器知道每个元素都是NSNumber
,你可以使用点语法(有些人喜欢),如
diffForAverage = average - redValues[j + 1].floatValue; // error occurs here