我有以下方法:
-(UIImage *)flagFromOrigin:(NSString *)originString {
NSRange range;
for (NSString *arrayString in countryArray) {
range = [[originString lowercaseString] rangeOfString:arrayString];
if (range.location != NSNotFound) {
return [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", arrayString]];
}
}
return nil;
}
在课程的早期,我创建一个NSArray * countyArray并添加文件名(@“United States”,@“canada”,@“germany”,@“denmark”等)。
我希望有人可以告诉我一个更好的方法,所以我不必创建数组来循环,但如果我可以直接查看文件名?这样我就不必在数组中添加200多个NSString对象,可能会忽略一大堆。
由于
答案 0 :(得分:0)
看起来您正在尝试为某个国家/地区返回图片,但前提是该图片位于您的批准列表中,并且originString
可能包含您不关心的其他文字。
相反,如果可能的话,我要求originString
仅包含您关注的文字,然后将这些图片移到资源的子目录中,并直接调用imageNamed:
。如果图像无法加载,它将返回nil
并且行为与您的方法相同。你可以摆脱那个数组,避免循环和大量的字符串比较。
如果您无法为originString
添加该要求,那么我建议您首先考虑修改这个设计问题。
根据Canada Dev的回复进行编辑:
查看-[NSFileManager contentsOfDirectoryAtPath:error:]
的文档。您可以枚举目录中的文件,将它们(减去.png
扩展名)存储在数组中,然后使用该数组扫描匹配项。
您应该按长度对数组进行排序,最长一次,以避免误报。我想不出一个国家的例子,但对于你想在“弗吉尼亚”之前检查“西弗吉尼亚”的州,因为后者将匹配与前者匹配的字符串。