如何检查对象是一种阻止与否

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)

  • 我把它做得更好 - 这就是要点:https://gist.github.com/steipete/6ee378bd7d87f276f6e0 (2认同)

Pie*_*ard 7

将您的块包裹在您自己的类中:

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)


Jen*_*ton 2

没有受支持的方法可以执行此操作。您必须跟踪哪些对象是块,以及它们的类型签名是什么。

您是否有一组混合字符串和块的实际用例?