我是开发应用程序的新手。我有一张NSArray,里面有2张图片。
imageOneArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"White.png"], [UIImage imageNamed:@"Black.png"], nil];
我的问题是,有没有办法制作一个看起来像这样的“if语句”:
if ([imageOneArray = [UIImage imageNamed:@"White.png"]) {
//DO SOMETHING
};
上面的代码给了我错误,我该如何解决?我究竟做错了什么?我能做些什么呢?
非常感谢任何帮助。
答案 0 :(得分:5)
如果您需要检查数组是否包含对象,您应该使用
if ([imageOneArray containsObject:[UIImage imageNamed:@"White.png"]]) {
//DO SOMETHING
};
在这里你应该注意,该数组检查包含发送-isEqual:
到其对象的包含。因此,在UIImage
-isEqual:
上只会进行指针比较。由于YES
提供的图片缓存机制,上述代码将返回+imageNamed:
,但一般来说,它应返回NO
。请考虑以下示例:
NSString *path = [[NSBundle mainBundle] pathForResource:@"White" ofType:@"png"];
UIImage *image1 = [UIImage imageWithContentsOfFile:path];
UIImage *image2 = [UIImage imageWithContentsOfFile:path];
NSArray *arr = @[image1];
BOOL contains1 = [arr containsObject:image1]; // YES
BOOL contains2 = [arr containsObject:image2]; // NO
请考虑以下带字符串的示例:
NSString *string1 = [NSString stringWithString:@"abc"];
NSString *string2 = [NSString stringWithString:@"abc"];
NSArray *arr = @[string1];
BOOL contains1 = [arr containsObject:string1]; // YES
BOOL contains2 = [arr containsObject:string2]; // YES
因此,您应该记住数组中对象的相等规则。在NSHipster上有关于这个主题Equality的精彩文章。
如果你需要检查数组是否相等到另一个数组,请使用
if ([imageOneArray isEqualToArray:@[[UIImage imageNamed:@"White.png"]]]) {
//DO SOMETHING
};
查看NSArray class reference以了解何时可以使用数组
答案 1 :(得分:4)
您可以尝试以下方法,假设目标是检查数组是否包含名为" White"的图像。请注意,UIImage -imageNamed:不需要扩展名
if ([imageOneArray containsObject:[UIImage imageNamed:@"White"]]) {
//DO SOMETHING
}
答案 2 :(得分:3)
您在代码中遇到了一些问题。
首先"="
是一项任务,例如
myName = Joe
而" =="是比较
1 == 1 (true) 1 == 2 (false)
其次,一个数组包含多个对象,因此您必须经历并比较每个对象(或使用containsObject方法,其他答案包括)。你经常会用For循环来做到这一点。
UIImage* myImageToCompare = [UIImage imageNamed:@"White"];
for (int i=0; i<imageOneArray.count; i++) {
if ([imageOneArray objectAtIndex:i] == myImage){
...do something
}
}
答案 3 :(得分:2)
您在数组中使用containsObject -containsObject:使用-isEqual:比较对象,这通常是您想要的:例如,包含相同UNICODE字符的两个NSString对象将被视为相等,即使它们不是同一个对象。
答案 4 :(得分:1)
- (void)doStuff{
UIImage * const targetImage = [UIImage imageNamed:@"White"];
for (UIImage *currentImage in someArray /*replace someArray with your own*/) {
if ([self image:targetImage isEqualTo:currentImage]) {
// Do stuff
break;
}
}
}
- (BOOL)image:(UIImage * const)firstImage isEqualTo:(UIImage * const)secondImage {
NSData * const firstData = UIImagePNGRepresentation(firstImage);
NSData * const secondData = UIImagePNGRepresentation(secondImage);
return [data1 isEqual:data2];
}