2015-12-09 43 views
1

比方說,我有以下情況:多個循環和清潔解決方案條件

NSError *error; 
for (NSObject1 *obj1 in objects1) { 
    [sth doSomethingWithObj1:obj1 withError:&error]; 
} 
for (NSObject2 *obj in objects2) { 
    [sth doSomethingWithObj2:obj2 withError:&error]; 
} 
for (NSObject3 *obj in objects3) { 
    [sth doSomethingWithObj3:obj3 withError:&error]; 
} 
for (NSObject4 *obj in objects4) { 
    [sth doSomethingWithObj4:obj4 withError:&error]; 
} 
[sth doSomethingWithObj5:obj5 withError:&error]; 

的對象有明顯的不同,方法也不同。如果它出現,我想打印該錯誤。我想保持代碼DRY,所以重複這是一種錯誤的解決方案:

if (error) { 
    NSLog(@"Error occurred: %@", error.localizedDescription); 
    return; // can be but doesn't have to 
} 

我不希望有重構這些doSomethingWithObjX:方法,因爲它們可以在其他許多地方(因此使用塊代替的錯誤不是一個好主意)。

我想到了使用PromiseKit,但該項目對iOS 7有效(PromiseKit 3.0不兼容,最後一個是1.6),並且還需要大量工作來重構基礎類,所以我已經辭職了這個想法。

我怎樣才能以這種方式編寫代碼呢很漂亮& DRY在每次修改發生後每次修改完成後都會進行檢查?

+2

我沒有看到問題。 –

+0

@DuncanC你的投票結束很快。增加了這個問題。 – Vive

+0

其實那不是我。 –

回答

2

如果錯誤仍然是nil,則最簡單的方法是僅執行每個循環,並在末尾添加if(error)塊。

順便說一句:有時使它變幹使得它也不易讀,特別是在一個簡單的情況下是這樣的。

+0

它的可讀性不會低,有很多這樣的循環。不要只關注上下文,只會看到錯誤處理。如果我想添加'return'語句(來自我的+1),你的選擇是好的。如果不是......? – Vive

+0

如果不是,您可以收集數組中的錯誤,並在最後打印它們,循環遍歷數組。 – TheEye

+0

好的概念。接受,謝謝! – Vive

相關問題