我正在绕过街区并尝试发现它们的使用方式。 所以我想知道是否可以像参数那样传递块到块?
以下是一些示例代码:
//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
答案 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");
});