最近遇到这样一个场景:丢给我一个对象,我要判断它在不在我需要的类范围内。常规就是写if else来逐一判断,但今天我用了另外一种方式。
大概思路:我用类的名字和声明方法,然后判断self是否能响应这个方法,如果能响应就说明这个类是我需要的。在声明方法时为了让代码看起来简洁一点我用了宏定义。我把类名作为参数,用宏定义了一个方法,如下:
#define traceClass(c)\
- (id)trace##c:(id)obj {\
return nil;\
}\
这样定以后,我再声明的方法的时候就可以清晰看到我需要哪些类,如下:
traceClass(ClassA)
traceClass(ClassB)
traceClass(ClassC)
这样我一目了然,三行代码替换宏定义就是三个方法。
但在实际使用中我比这要复杂很多,在方法的实现里面可以继续套用这种方式,最后写出一段我自己都感觉有点绕的代码。
听说很多人就是靠写让人看不懂的代码装逼的~