2015-09-26 71 views
-3

我的问题非常简单。当从一个方法或函数返回一个块或者阻塞自己时,如何将这个返回块从这个返回块传递给接收该返回块的变量?如何使用方法或函数的返回块?

+1

您是否在寻找如何从一个方法返回一个块? – Abhinav

+0

这个讨论有http://stackoverflow.com/questions/13193673/how-do-i-create-an-objective-c-method-that-return-a-block – Abhinav

+0

@Abhinav没有,我一直在寻找好的解释如何接收来自方法或函数的返回块或自行阻止它。你会如何收到一个被返回的区块?但我明白混乱在哪里。 –

回答

0

这里有一种方法:

所有的
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); 
+0

有没有其他方法可以做到这一点? –

+1

我不确定你想要做什么。语法应该和我在这里展示的一样,尽管你的块类型可能会有所不同。 – sbooth

0

首先声明你的块语法。

写入下面的语法在#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); 
}]; 
+0

我一直在寻找如何从一个方法或函数接收返回块或阻止它的自我。你会如何收到一个被返回的区块?但我明白混乱在哪里。 –

1

我的问题真的是直线前进。当从一个方法或函数返回一个块或者阻塞自己时,如何将这个返回块从这个返回块传递给接收该返回块的变量?

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

分配。

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

与任何类型的中等复杂类型声明一样,您可能会首先使用typedef来给它一个简短的名称。例如: -

typedef int (^SomeIntFunction)(int, int) 

SomeIntFunction selectFunction() { ... } 

SomeIntFunction sif = selectFunction(); 

int result = sif(42, 24); 

HTH