【问题标题】:How to use a returning block from method or function?如何使用方法或函数的返回块?
【发布时间】:2015-12-23 21:53:47
【问题描述】:

我的问题非常直截了当。当从方法或函数或块本身返回块时,如何将该返回块从此类传递到接收该返回块的变量中?

【问题讨论】:

  • 您是否在寻找如何从方法中返回块?
  • 这个帖子有很好的解释stackoverflow.com/questions/13193673/…
  • @Abhinav 不,我正在寻找如何从方法或函数接收返回块或自行阻止它。你将如何收到一个被退回的块?但我明白困惑在哪里。

标签: objective-c function methods block


【解决方案1】:

我的问题非常直截了当。当从方法或函数或块本身返回块时,如何将返回块从此类传递到接收返回块的变量中?

如何为任何类型的值“传递返回”值?

作业。

返回一个块并没有什么特别之处,它只是一个值——在这种情况下是一个指向块对象的指针值——它被返回并分配给一个变量,就像任何其他值一样。如果返回值是double 类型,则将其存储在相同类型的变量中;如果返回值是某个块类型,那么将其存储在具有相同块类型的变量中。

与任何具有中等复杂类型声明的类型一样,您可能会发现首先使用typedef 给它起一个漂亮的短名称更容易。例如:

typedef int (^SomeIntFunction)(int, int)

SomeIntFunction selectFunction() { ... }

SomeIntFunction sif = selectFunction();

int result = sif(42, 24);

HTH

【讨论】:

    【解决方案2】:

    首先声明你的块语法。

    #import ...底部写下语法。

    typedef void(^completionBlock) (NSString *message);
    

    现在用块创建函数:

    - (void)callFunctionWithBlock: (NSString *)text completion: (completionBlock)callBlock {
        NSLog(@"%@", text);
    
        callBlock([NSString stringWithFormat:@"block with return message: %@", text]);
    }
    

    调用你的函数:

    [self callFunctionWithBlock:@"testing block" completion:^(NSString *message) {
                NSLog(@"%@", message);
    }];
    

    【讨论】:

    • 我正在寻找如何从方法或函数接收返回块或自行阻止它。你将如何收到一个被退回的块?但我明白困惑在哪里。
    【解决方案3】:

    这是一种方法:

    typedef void(^blockTakingInt)(int);
    
    // Returns a block
    blockTakingInt f()
    {
        return ^(int i) {
            printf("i = %d\n", i);
        };
    }
    
    // Accepts a block as a parameter
    void g(int i, blockTakingInt b)
    {
        b(i);
    }
    
    // Store the block returned by the function f in b, and pass it to g
    void (^b)(int) = f();
    g(4, b);
    

    【讨论】:

    • 还有其他方法吗?
    • 我不确定你到底想做什么。语法应该和我在这里展示的一样,尽管你的块类型可能会不同。
    猜你喜欢
    • 2018-07-26
    • 1970-01-01
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    相关资源
    最近更新 更多