
不知道这样描述是否正确,举个例子:
# Person.h
@interface Person : NSObject
@property (nonatomic,copy)NSString * name;
@property (nonatomic,copy)NSString * qq;
@end
定义一个 name ,下面有个方法是通过 name 得到某个 Person 对象。 实现效果: name 属性已经用代码写好,使用宏来实现方法的申明[输入 name ,得到- (Person *)getPersonByName:(NSString *)name ],但是现在遇到的问题就是这个 Person 用怎么样宏去替换。求教育~
1 chaselen 2017 年 1 月 14 日 #define genMethod(className) - (className *)get##className##ByName:(NSString *)name; |
2 chaselen 2017 年 1 月 14 日 genMethod(Object) 就会展开成 -(Object *)getObjectByName:(NSString *)name; |
3 xiubin 2017 年 1 月 14 日 估计只有我闲的没事才回回复楼主? “ Objective-C 在头文件里能否是用宏得到类名称” -> “ Objective-C 在头文件里是否能用宏得到类名称” 你是要表达这个意思吗? 另外,建议楼主看下 markdown ,你直接贴代码 "-"会被解析成 “” 最后 "- (Person *)getPersonByName:(NSString *)name;"这怎么看都是类方法比实例方法更合适一点吧? 楼主写的东西自己看得懂吗?我是没看懂,建议整理一下。 |
5 lalalafq OP |
6 xiubin 2017 年 1 月 14 日 “[输入 name ,得到- (Person *)getPersonByName:(NSString *)name ]” 你输入 name ,怎么能得到这个?好歹你得先有个 Person 对象才能调用这个方法吧? “总结一下,就是在头文件中使用宏定义得到类名称”,单看这一句,实在不能明白你得意思,不妨你举个例子吧,你怎么写,输出什么。。? |
7 HelloiWorld 2017 年 1 月 14 日 via iPhone 不知道怎么用宏,感觉 runtime 应该能做到 还是去 so 站问答案来的快一点 |
10 lalalafq OP @HelloiWorld 因为在头文件做申明使用,用不来运行时,所以在编译的时候就要知道 ClassName |
11 XDDD 2017 年 1 月 16 日 via iPhone 这是我能想到的方法: 写一对 CLASS_BEGIN 和 CLASS_END 宏来替换原有 @interface ,在 CLASS_BEGIN 里 define 一个 CLASS_NAME ,在 CLASS_END 里 undef 掉。这样你就可以在 method 里使用 CLASS_NAME 了 当然在宏里定义宏是不允许的,你可能需要写一个工具来完成第一次展开 |
12 XDDD 2017 年 1 月 16 日 via iPhone 另外我觉得你可能需要练习一下表达能力……这明显是一个关于宏的黑魔法的问题,然而题目里完全看不出来…… |