我正在使用 Objective-C 来回答这个问题,但这并不是真正特定于语言的。
我的用户类中有以下方法,
+(BOOL)canPerform:(NSString *)string
withCompletion:(void(^)(BOOL success,NSError *error))block;
在我的 ViewController 中
-(void)performTask{
if([User canPerform:@"My String" withCompletion:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"Task success!");
}
else{
NSLog(@"Task Failed with error : %@,error.localizedDescription");
}
}])
{
NSLog(@"Can perform task");
}
else{
NSLog(@"Can not perform task");
}
}
我正在执行的任务无需赘述。这不是我的问题。
我的问题是:
这是一个好的编程习惯吗?使用接受 block 的 BOOL 方法作为 if 语句的条件?
此方法
[User canPerform]
做了两件事。首先,它检查它是否可以执行此特定任务,如果可以,它会执行该任务。但是方法名称并没有反射(reflect)这一点。方法名称是canPeform
。我可以使用ifCanThenPeformThisTask
但这听起来很奇怪而且感觉不像是 BOOL 方法。命名此方法的最佳方法是什么?
最佳答案
它可以更好。该方法的名称具有误导性,并且由于括号的数量和到处嵌套,代码难以阅读。像这样会更好:
+(BOOL)checkAndPerform:(NSString *)string
withCompletion:(void(^)(BOOL success,NSError *error))block;
并用作:
-(void)performTask {
BOOL available = [User checkAndPerform:@"My String" withCompletion:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"Task success!");
} else {
NSLog(@"Task Failed with error : %@,error.localizedDescription");
}
}];
if(available)
{
NSLog(@"Can perform task");
} else {
NSLog(@"Can not perform task");
}
}
现在很清楚,我们正在检查潜力和执行(如果可用),并且它根据执行的可用性明确地将操作与结果操作分开。
关于ios - 这是一个好的编程习惯吗? if 条件是返回带有回调的 bool 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32905244/