我见过很多返回类型为 void 的 block 。但是可以声明非空 block 。这个有什么用?
block 声明,
-(void)methodWithBock:(NSString *(^)(NSString *str))block{
// do some work
block(@"string for str"); // call back
}
使用方法,
[self methodWithBock:^NSString *(NSString *str) {
NSLog(str); // prints call back
return @"ret val"; // <- return value for block
}];
在上面的 block 声明中, block 的 NSString 返回类型的目的到底是什么?如何使用返回值(“ret val”)?
最佳答案
出于与使用非空函数指针相同的原因,您可以使用非空 block - 在代码执行时提供额外的间接级别。
NSArray
的 sortUsingComparator
提供了这样一种用法的示例:
NSArray *sorted = [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){
NSString *lhs = [obj1 stringAttribute];
NSString *rhs = [obj2 stringAttribute];
return [lhs caseInsensitiveCompare:rhs];
}];
比较器 block 让您可以将比较逻辑封装在执行排序的sortedArrayUsingComparator
方法之外。
关于objective-c - Objective C - 非空 block 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736763/