自动提示`宏`


自动提示宏:能在输入宏的时候像属性一样让XCode有提示功能
宏代码:#define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath))
比如监听view的frame的变化
不使用自动提示宏:[self.view addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionNew context:nil];
使用自动提示宏:[self.view addObserver:self forKeyPath:keyPath(self.view,frame)  options:NSKeyValueObservingOptionNew context:nil];

解析

第一步:定义一个宏

define keyPath(objc,keyPath) (objc.keyPath,keyPath)

宏的操作原理:每输入一个子母就会直接将宏右边的拷贝,并且会自动补齐前面的内容。

第二步:将宏变成字符串

define keyPath(objc,keyPath) (objc.keyPath,#keyPath)

在宏里面添加一个#号,宏里面的#会自动将后面的参数变成C语言的字符串。但是,会有警告⚠️

![第二步.png](http://upload-images.jianshu.io/upload_images/1170347-02ec85bca08ed38f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

第三步:去除警告
警告的原因:还有一个结果没有使用。
(objc.keyPath,#keyPath)是个逗号表达式,逗号表达式只取后面的值,所以给第一个值加void,强转类型为void,表示不使用第一个值的结果。

define keyPath(objc,keyPath) ((void)objc.keyPath,#keyPath)

第四步:将C语言字符串转换成OC字符串使用 @(C语言字符串)

define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath))

注意:括号一个不能少。

你可能感兴趣的:(自动提示`宏`)