if语句,更快的方式?

时间:2013-01-11 14:21:31

标签: objective-c xcode if-statement coding-style

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

我创建了一个函数,检查字符串是否不是“”,如果没有将它添加到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 个答案:

答案 0 :(得分: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];
    }
}

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

答案 1 :(得分:0)

如果您有6张照片,请保持原样 否则使用Urls数组,然后遍历它们。

答案 2 :(得分:0)

与空字符串进行比较相当于测试字符串是否为零长度。它在CPU时间方面不会节省太多,但至少更容易阅读。您也可以在设置URL时将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.

如果你实际上没有使用URL1等,你可以将它们直接放入数组中:

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

答案 3 :(得分:0)

使self.searchResults成为一个NSArray of Strings,只要你给foto的值赋值,你就可以填充

循环有两种方法

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

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

for(NSObject *key in anArrayOfObjects)

将循环遍历数组中的每个对象

空检查总是一个好主意,(NSString *)将[NSNull null]类型转换为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]];
        }
    }
}