0

我知道这可以更快,但我没有多年的编码经验,所以我只是在努力学习..

我做了一个函数来检查一个字符串是否不是 "" 如果没有将它添加到一个 nsurl 然后我检查 nsurl 是否不是 nil 并将它添加到一个可变数组中:

-(void)CheckUrls
{    
self.items = [NSMutableArray array];


NSURL *URL1 ;
NSURL *URL2 ;
NSURL *URL3 ;
NSURL *URL4 ;
NSURL *URL5 ;
NSURL *URL6 ;


NSLog(@" FOTO 1: %@ \n FOTO2 : %@ \n FOTO 3 : %@ \n FOTO 4 : %@ \n FOTO 5: %@ \n FOTO 6: %@ \n",self.searchResult.foto1,self.searchResult.foto2,self.searchResult.foto3,self.searchResult.foto4,self.searchResult.foto5,self.searchResult.foto6);

if (![self.searchResult.foto1 isEqualToString:@""]) {
    URL1 = [NSURL URLWithString:self.searchResult.foto1];

}
if (![self.searchResult.foto2 isEqualToString:@""]) {
    URL2 = [NSURL URLWithString:self.searchResult.foto2];

}
if (![self.searchResult.foto3 isEqualToString:@""]) {
    URL3 = [NSURL URLWithString:self.searchResult.foto3];

}
if (![self.searchResult.foto4 isEqualToString:@""]) {
    URL4 = [NSURL URLWithString:self.searchResult.foto4];

}
if (![self.searchResult.foto5 isEqualToString:@""]) {
    URL5 = [NSURL URLWithString:self.searchResult.foto5];

}
if (![self.searchResult.foto6 isEqualToString:@""]) {
    URL6 = [NSURL URLWithString:self.searchResult.foto6];

}



if (URL1 !=NULL) {
    [items addObject:URL1];
}

if (URL2 !=NULL) {
    [items addObject:URL2];
}
if (URL3 !=NULL) {
    [items addObject:URL3];
}
if (URL4 !=NULL) {
    [items addObject:URL4];
}
if (URL5 !=NULL) {
    [items addObject:URL5];
}
if (URL6 !=NULL) {
    [items addObject:URL6];
}

这个功能可以优化吗?

4

4 回答 4

4
NSArray* photosToCheck = [NSArray arrayWithObjects:
  self.searchResult.foto1, self.searchResult.foto2, self.searchResult.foto3, self.searchResult.foto4, self.searchResult.foto5, self.searchResult.foto6, nil];

for (NSString* photo in photosToCheck) {
    if (photo.length > 0) {
        NSURL* photoUrl = [NSURL URLWithString:photo];
        [items addObject:photoUrl];
    }
}

但是,拥有名为foto1, foto2, ... 的属性会立即告诉我们应该使用数组来保存数据。

于 2013-01-11T14:29:06.037 回答
0

如果您正好有 6 张照片,请保持原样。
否则使用 URL 数组,并循环遍历它们。

于 2013-01-11T14:28:49.017 回答
0

与空字符串进行比较相当于测试字符串是否为零长度。它不会在 CPU 时间方面节省太多,但至少更容易阅读。您还可以在设置 URL 时将它们存储在数组中,因此以后无需对其进行测试:

if ([self.searchResult.foto1 length] > 0) {
    URL1 = [NSURL URLWithString:self.searchResult.foto1];
    [items addObject:URL1];
}
if ([self.searchResult.foto2 length] > 0) {
    URL2 = [NSURL URLWithString:self.searchResult.foto2];
    [items addObject:URL2];
}
// etc.

如果您实际上不使用URL1etc,您可以将它们直接放入数组中:

if ([self.searchResult.foto1 length] > 0) {
    [items addObject:[NSURL URLWithString:self.searchResult.foto1]];
}
// etc.
于 2013-01-11T14:29:11.107 回答
0

使 self.searchResults 成为一个 NSArray 的字符串,无论您在哪里为照片赋值

有两种方法可以执行循环

for(NSInteger x = 0;x<100;x++)

在这种情况下,它将循环直到条件为假 x 大于 99 或

for(NSObject *key in anArrayOfObjects)

它将遍历数组中的每个对象

空值检查总是一个好主意, (NSString *) 将 [NSNull null] 类型转换为空 NSString

url != (NSString *)[NSNull null]

您不需要中间 NSURL,因为您已经知道 foto 值是空还是 null,因此您可以立即将对象作为新的 NSURL 放入项目数组中

[items addObject:[NSURL URLWithString:url]];

最终代码

-(void)CheckUrls
{    
    self.items = [NSMutableArray array];

    for(NSString *url in self.searchResult){
        if( url != (NSString *)[NSNull null] && ![url isEqualToString:@""] ){
            [items addObject:[NSURL URLWithString:url]];
        }
    }
}
于 2013-01-11T14:53:59.937 回答