iOS版。将块传递给块作为参数

时间:2013-12-13 18:53:38

标签: ios objective-c-blocks

我正在绕过街区并尝试发现它们的使用方式。 所以我想知道是否可以像参数那样传递块到块?

以下是一些示例代码:

//declaration
static id (^someBlock)(id) = ^(id someClass) {
    // do some stuff to obtain class some class instance
    // check if class instance respond to @selector 
    // if yes - perform selector
}

//usage
+ (instancetype)someMethod {
   someBlock(SomeClass.class);
   // do additional work and return some instance type
}

//declaration static id (^someBlock)(id) = ^(id someClass) { // do some stuff to obtain class some class instance // check if class instance respond to @selector // if yes - perform selector } //usage + (instancetype)someMethod { someBlock(SomeClass.class); // do additional work and return some instance type }

这很好,但还不够好,因为如果调用者想要在someBlock完成时做一些额外的事情,我们会强制调用者响应选择器。

所以我的问题是如何在someBlock完成后用参数块调用someBlock块。

有些人喜欢:

    //declaration
    static id (^someBlock)(id, <b>^otherBlock</b>) = ^(id someClass, <b>????</b>) {
        // do some stuff to obtain class some class instance
        otherBlock();
    }

有什么建议吗?

PS:请注意,问题不在于将块作为参数传递给方法。

谢谢, Venelin

1 个答案:

答案 0 :(得分:2)

这是你在找什么?

static id (^someBlock)(id, void (^otherBlock)()) = ^id (id someClass, void (^otherBlock)()) {
    otherBlock();
    return nil; // just because you declares a `id` return type
};

并称之为

someBlock(someClass, ^() {
    NSLog(@"other stuff");
});