2014-08-29 84 views
0

我是开发应用程序的新手。我有一个NSArray中有2个图像。NSArray和“If-statement”

imageOneArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"White.png"], [UIImage imageNamed:@"Black.png"], nil]; 

我的问题是,有没有一种方法,使一个“if语句”,看起来像这样:

if ([imageOneArray = [UIImage imageNamed:@"White.png"]) { 
    //DO SOMETHING 
}; 

上面的代码是给我的错误,我该如何解决?我究竟做错了什么?我做什么工作?

任何帮助将不胜感激。

+0

我建议你保持图像的名称,如在阵列中,'@ @ “White.png”,@ “Black.png”,..]'和'[比较imageOneArray containsObject:@“White.png”]'和'isEqualToString:'方法可以很容易的进行元素比较。 – Akhilrajtr 2014-08-29 04:39:59

回答

5

如果您需要检查数组是否包含一个对象,你应该用

if ([imageOneArray containsObject:[UIImage imageNamed:@"White.png"]]) { 
    //DO SOMETHING 
}; 

这里去,你应该注意到,该阵列检查遏制发送-isEqual:到它的对象。所以,在UIImage-isEqual:将只做指针比较。由于+imageNamed:提供的图像缓存机制,上面的代码将返回YES,但是,通常应该返回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看看看的时候,你可以用数组

+0

谢谢你的信息。现在,为什么当我使用containsObject时会给我一个错误?错误说:“'NSArray'没有可见的@interface'声明选择器'containsObject'” – 2014-08-29 04:46:19

+0

你错过了冒号可能...上面的代码编译就好了 – 2014-08-29 04:48:40

+0

是的,我做到了。非常感谢你 – 2014-08-29 04:55:03

4

假设目标是检查数组是否包含名为“White”的图像,您可以尝试以下操作。请注意,UIImage的-imageNamed:不需要扩展

if ([imageOneArray containsObject:[UIImage imageNamed:@"White"]]) { 
    //DO SOMETHING 
} 
2

您驾驶室使用containObject在做数组 -containsObject:使用-isEqual:比较对象,这通常是您想要的:例如,包含相同UNICODE字符的两个NSString对象将被视为相等,即使它们不是相同的对象。

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 
} 
} 
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]; 
}