Xcode 编程,Objective-C 宏定义
/*1. 让宏定义有提示
#define kClassAttributeString(objc, path) objc.path
>1.分析宏定义的本质是,每输入一个字母,就进行拷贝翻译成后面的形式
>2.所以当我们第第一个参数 输入 self 的时候,翻译 成 代码就是 self. 那么后面就会有提示,也就是输入宏定义的 path参数的时候,其实代码是就已经变成了 self. 什么 那么path 就自然有提示了
*/
/*2. 得到属性的 C 字符串
#define kClassAttributeString(objc, path) (objc.path, #path)
>1这里我们想得到的是 属性的 字符串 可以使用 宏定义中的 # 这个表示后面的参数变成"" 的C字符串,然而我们又想有提示,那么就使用 逗号运算符号 , 表示最右边的是结果
*/
/*3. 忽略掉 , 逗号运算的前面的东西,让编译的时候不报警告
#define kClassAttributeString(objc, path) ((void)objc.path, #path)
>1但是我们想忽略掉前面的参数,因为那些用宏定义会变成 (self.view.frame, "frame") 但是 self.view.frame 是一个get方法,没有接受的容器,会报警告,那么我们可以使用(void)忽略掉
*/
/*4. 加入 @ 得到 OC 字符串
#define kClassAttributeString(objc, path) @(((void)objc.path, #path))
也可以这样写
#define kClassAttributeString(objc, path) ((void)objc.path, @#path)
>1加上 @ 得到OC的字符串
*/
//运用到KVO,KVC 能够拿到属性的字符串表示,又可以有提示
#define kClassAttributeString(objc, path) @(((void)objc.path, #path))