NSArray和"If-statement"

Lui*_*cio 0 objective-c nsarray ios

我是开发应用程序的新手.我有一张NSArray,里面有2张图片.

imageOneArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"White.png"], [UIImage imageNamed:@"Black.png"], nil];
Run Code Online (Sandbox Code Playgroud)

我的问题是,有没有办法制作一个看起来像这样的"if语句":

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

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

任何帮助将不胜感激.

Pet*_*nev 5

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

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

在这里你应该注意,该数组检查发送-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
Run Code Online (Sandbox Code Playgroud)

并考虑以下带字符串的示例:

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
Run Code Online (Sandbox Code Playgroud)

因此,您应该记住数组中对象的相等规则.关于NSHipster 平等主题的文章很精彩.

如果你需要检查数组是否等于另一个数组

if ([imageOneArray isEqualToArray:@[[UIImage imageNamed:@"White.png"]]]) {
    //DO SOMETHING
};
Run Code Online (Sandbox Code Playgroud)

查看NSArray类引用,了解何时可以使用数组