让我说我有以下案例:
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),而且还需要大量的工作来重构底层类,所以我已经辞去了这个想法。
我怎样才能这样写,代码很漂亮&在每个地点之后进行检查时干燥是否发生了修改?
答案 0 :(得分:2)
最简单的方法是,如果错误仍为nil
,则仅执行每个循环,并在结尾处添加if(error)
块。