1

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

+(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

4

1 回答 1

1

根据您的评论,您似乎知道一个属性并希望在它返回一个结构时以某种方式行事。如果是这样,那么您可以执行以下操作:

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

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

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

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

于 2013-07-05T05:06:50.333 回答