多循环和条件

时间:2015-12-09 14:44:57

标签: objective-c refactoring dry

让我说我有以下案例:

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),而且还需要大量的工作来重构底层类,所以我已经辞去了这个想法。

我怎样才能这样写,代码很漂亮&在每个地点之后进行检查时干燥是否发生了修改?

1 个答案:

答案 0 :(得分:2)

最简单的方法是,如果错误仍为nil,则仅执行每个循环,并在结尾处添加if(error)块。

顺便说一下:有时让它变干也会降低它的可读性,特别是在一个简单的例子中就是这样。