Struct isKindOfClass

时间:2013-07-05 04:24:50

标签: ios objective-c

如何确定结构是否属于特定类型?换句话说,如果我得到一个对象,我怎么知道underluying类型是一个struct?

+(BOOL)isPrimitive:(id)input
{
    return [input isKindOfClass:[NSNumber class] ] || [input isKindOfClass:[NSDate class]] || [input isKindOfClass:[NSString class]]
        ||  __IS_THIS_A_STRUCT__ (specifically SEL);
}

我应该用什么代替 IS_THIS_A_STRUCT

1 个答案:

答案 0 :(得分:1)

根据您的评论,看起来您知道一个属性,并且如果它返回一个结构,则希望以某种方式行动。如果是这样,那么你可以做类似的事情:

if(!strcmp([[self class] 
    instanceMethodSignatureForSelector:@selector(propertyName)].methodReturnType, 
    @encode(SEL)))

@encode返回命名类型的type encoding,这是一个C字符串。 instanceMethodSignatureForSelector返回NSMethodSignature,可以将该方法的返回类型指定为编码类型。

两种类型编码不保证具有相同的标识,但具有相同的值。因此,您可以使用C函数strcmp来检查它们是否相同。

如果在编译时未知选择器名称,则可以使用NSSelectorFromString

相关问题