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