Abh*_*eet 16 cocoa cocoa-touch objective-c
我们如何识别任何特定对象是否有块?
例如,
NSSet *set =[NSSet setWithObjects:
@"name1",
@"name2",
[^{ /* ..... some code */ } copy],
nil];
Run Code Online (Sandbox Code Playgroud)
我们怎样才能找出set中的哪个对象是一种块?
Mic*_*ine 11
有一种更安全的方法可以确定某些东西是不是实际使用私有api或使用私有字符串名称构建类的块:
- (BOOL)isBlock:(id)item {
id block = ^{};
Class blockClass = [block class];
while ([blockClass superclass] != [NSObject class]) {
blockClass = [blockClass superclass];
}
return [item isKindOfClass:blockClass];
}
Run Code Online (Sandbox Code Playgroud)
将您的块包裹在您自己的类中:
BlockWrapper *blockWrapper = [BlockWrapper wrapperWithBlock:^{ … }];
Run Code Online (Sandbox Code Playgroud)
检查类型并提取实际块:
if ([obj isKindOfClass:[BlockWrapper class]]) {
codeBlock = [(BlockWrapper*)obj block];
}
Run Code Online (Sandbox Code Playgroud)