ios - 这是一个好的编程习惯吗? if 条件是返回带有回调的 bool 的方法

标签 ios objective-c oop architecture language-concepts

我正在使用 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");

        }    
    }

我正在执行的任务无需赘述。这不是我的问题。

我的问题是:

  1. 这是一个好的编程习惯吗?使用接受 block 的 BOOL 方法作为 if 语句的条件?

  2. 此方法 [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/

相关文章:

ios - 如何在 UITextView 中显示 NSArray

ios - 快速将数据推送到 UISplitViewController 的主视图 Controller 和详细 View Controller

ios - 如何在 iOS 7 的 UITextField 中添加带缩进的图像 UIImage?

Objective-C 方法语法

c++ - Composition 对可测试性不利吗?

ruby - 我应该打开类的实例变量只是为了测试验证吗?

ios - 如何在 hh :mm:ss format? 中输入时间值

ios - 为什么我的委托(delegate)方法没有在 Storyboard中调用?

ios - MFMailComposeViewController 外观 setTintColor 迷失 iOS 7

php - 确定何时在方法链中调用了最后一个方法