多循环和条件的清洁解决方案
Clean solution for multiple loop and conditional
假设我有以下情况:
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,但是这个项目对iOS7有效(PromiseKit 3.0不兼容,最后一个是1.6),而且需要大量的工作来重构底层 类,所以我放弃了这个想法。
我怎样才能这样写,代码漂亮且干燥,同时在每个修改发生的地方进行检查?
最简单的方法是仅在错误仍然存在时才执行每个循环 nil
,并在末尾添加 if(error)
块。
顺便说一句:有时让它变干也会降低它的可读性,尤其是在一个简单的情况下。
假设我有以下情况:
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,但是这个项目对iOS7有效(PromiseKit 3.0不兼容,最后一个是1.6),而且需要大量的工作来重构底层 类,所以我放弃了这个想法。
我怎样才能这样写,代码漂亮且干燥,同时在每个修改发生的地方进行检查?
最简单的方法是仅在错误仍然存在时才执行每个循环 nil
,并在末尾添加 if(error)
块。
顺便说一句:有时让它变干也会降低它的可读性,尤其是在一个简单的情况下。