我见过很多具有void返回类型的块。但是可以声明非空块。是什么用的?
块声明,
-(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
}];
在上面的块声明中,NSString返回类型块的目的究竟是什么?如何使用返回值(“ret val”)?
答案 0 :(得分:11)
出于与使用非void函数指针相同的原因,可以使用非void块 - 在代码执行时提供额外的间接级别。
NSArray
的{{1}}提供了此类用法的一个示例:
sortUsingComparator
比较器块允许您将比较逻辑封装在执行排序的NSArray *sorted = [originalArray sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2){
NSString *lhs = [obj1 stringAttribute];
NSString *rhs = [obj2 stringAttribute];
return [lhs caseInsensitiveCompare:rhs];
}];
方法之外。
答案 1 :(得分:4)
这只是一个回报,所以你可以做这样的事情来利用返回值并对其进行处理。
-(void)methodWithBlock:(NSString *(^)(NSString *str))block{
// do some work
NSString *string = block(@"string for str"); // call back
// do something with the return string
NSLog(@"%@",string);
}