当我在SwiftObjective-C中使用它们时,我既对完成处理程序又对块感到困惑。当我在Google上的Swift中搜索块时,它会显示完成处理程序的结果!有人可以告诉我,就SwiftObjective-C而言,完成处理程序和块之间有什么区别?

最佳答案

在这里,您可以轻松地区分块和完成处理程序,实际上两者都是块,请参见下面的详细信息。

块:

块是添加到C,Objective-C和C++中的一种语言级别的功能,它使您可以创建不同的代码段,这些代码段可以作为值传递给方法或函数。块是Objective-C对象,这意味着它们可以添加到诸如NSArray或NSDictionary之类的集合中。

  • 它们可以在以后的时间执行,而不是在
    他们已经实现的范围正在执行。
  • 他们的使用最终导致了更整洁,更整洁的代码
    写,因为它们可以用来代替委托(delegate)方法,所以写
    仅在一个地方,不会传播到许多文件。

  • 语法: ReturnType(^ blockName)(Parameters)参见示例:
    int anInteger = 42;
    
    void (^testBlock)(void) = ^{
    
        NSLog(@"Integer is: %i", anInteger);   // anInteger outside variables
    
    };
    
    // calling blocks like
    testBlock();
    

    用参数阻止:
    double (^multiplyTwoValues)(double, double) =
    
                              ^(double firstValue, double secondValue) {
    
                                  return firstValue * secondValue;
    
                              };
    // calling with parameter
    double result = multiplyTwoValues(2,4);
    
    NSLog(@"The result is %f", result);
    

    完成处理程序:

    而完成处理程序是一种使用块来实现回调功能的方法(技术)。

    完成处理程序无非就是将一个简单的块声明作为参数传递给需要在以后进行回调的方法。

    注意:完成处理程序应始终是方法中的最后一个参数。一个方法可以具有任意数量的参数,但始终将完成处理程序作为参数列表中的最后一个参数。

    例子:
    - (void)beginTaskWithName:(NSString *)name completion:(void(^)(void))callback;
    
    // calling
    [self beginTaskWithName:@"MyTask" completion:^{
    
        NSLog(@"Task completed ..");
    
    }];
    

    有关UIKit类方法的更多示例。
    [self presentViewController:viewController animated:YES completion:^{
            NSLog(@"xyz View Controller presented ..");
    
            // Other code related to view controller presentation...
        }];
    
    [UIView animateWithDuration:0.5
                         animations:^{
                             // Animation-related code here...
                             [self.view setAlpha:0.5];
                         }
                         completion:^(BOOL finished) {
                             // Any completion handler related code here...
    
                             NSLog(@"Animation over..");
                         }];
    

    关于ios - 完成处理程序和块之间的区别: [iOS],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39609727/

    10-12 04:35