2015-01-12 81 views
0

我遇到過這種在過去的單一多個條件環路多個條件if語句

if ([[dict objectForKey:@"name"] rangeOfString:@「AB」].location != NSNotFound || 
    [[dict objectForKey:@"name"] rangeOfString:@「CD」].location != NSNotFound || 
    [[dict objectForKey:@"name"] rangeOfString:@「EF」].location != NSNotFound || 
    [[dict objectForKey:@"name"] rangeOfString:@「GH」].location != NSNotFound || 
    [[dict objectForKey:@"name"] rangeOfString:@「IJ」].location != NSNotFound ||){ 
    // do something 
    } 

其中我變爲代碼:

NSArray *myArray = [NSArray arrayWithObjects:@「AB」, 
       @"CD", @"EF", @"GH", @"IJ", nil]; 

for (id object in myArray) { 
    if ([[dict objectForKey:@"name」] rangeOfString: id].location != NSNotFound){ 
     // do something 
     break; 
    } 
} 

我明白可讀性更改代碼後更好。它有沒有其他的優勢?

+1

什麼,即時通訊意識到,但在這裏只是被肛門,你應該讓你像'對(字符串<#字符串名稱#>在myarray的)'相反,如果你願意,你可以改變'[字典環objectForKey:@「name」]'只是'dict [@「name」]''但是這是否值得商榷是否更具可讀性(不太明確,但我喜歡的更少混亂) – Fonix

+0

爲什麼使用C標籤? –

+0

我同意代碼是用Objective-C編寫的,但是我覺得這個用例也適用於C語言。將刪除標記。 – Vishvesh

回答

2

我沒有看到任何實質性差異。通過將字典訪問拉出循環,可以進一步提高可讀性和簡潔性。

// probably done for you by the compiler, but still prettier to look at... 
NSString *name = dict[@"name"]; 

for (id object in myArray) { 
    if ([name rangeOfString:id].location != NSNotFound){ 
     // do something 
     break; 
    } 
} 
+0

謝謝,我同意。 – Vishvesh

+0

同意。小問題:編譯器不能由於字典查找是不可見的,因此可以進行優化,並可能產生副作用。 –