如何确定结构是否属于特定类型?换句话说,如果我得到一个对象,我怎么知道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 ?
答案 0 :(得分:1)
根据您的评论,看起来您知道一个属性,并且如果它返回一个结构,则希望以某种方式行动。如果是这样,那么你可以做类似的事情:
if(!strcmp([[self class]
instanceMethodSignatureForSelector:@selector(propertyName)].methodReturnType,
@encode(SEL)))
@encode
返回命名类型的type encoding,这是一个C字符串。 instanceMethodSignatureForSelector
返回NSMethodSignature
,可以将该方法的返回类型指定为编码类型。
两种类型编码不保证具有相同的标识,但具有相同的值。因此,您可以使用C函数strcmp
来检查它们是否相同。
如果在编译时未知选择器名称,则可以使用NSSelectorFromString
。