美文网首页iOS学习Tool
iOS - 自动提示宏

iOS - 自动提示宏

作者: codeTao | 来源:发表于2018-10-20 00:46 被阅读2次

自动提示宏:能在输入宏的时候像属性一样让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语言的字符串。但是,会有警告⚠️

keyPath.png
  • 第三步:去除警告
    警告的原因:还有一个结果没有使用。
    (objc.keyPath,#keyPath)是个逗号表达式,逗号表达式只取后面的值,所以给第一个值加void,强转类型为void,表示不使用第一个值的结果。
#define keyPath(objc,keyPath) ((void)objc.keyPath,#keyPath)
  • 第四步:将C语言字符串转换成OC字符串使用 @(C语言字符串)
#define keyPath(objc,keyPath) @(((void)objc.keyPath,#keyPath))

注意:括号一个不能少。

  • 这样 ((void)objc.keyPath, #keyPath) 就会返回 #keyPath 内容,keyPath 就是我们对象的属性,但是这个时候返回的是属性,因为宏定义是 C 语言的内容所以我们先需要将内容转换为 C 语言的字符串,也就是#keyPath。

  • 这个时候返回的是 C 语言的字符串,而我们想要的是 OC 的字符串,直接使用 @()这个语法 就可以了。

相关文章

  • iOS中常用的宏定义

    iOS自动提示宏

  • iOS - 自动提示宏

    自动提示宏:能在输入宏的时候像属性一样让Xcode有提示功能 一.宏代码: 比如监听view的frame的变化不使...

  • iOS 自动提示宏

    当我们使用KVO监听属性的时候, 属性必须要写对,但是这个属性没有提示 所以我们想要写一个自动的提示宏来保证这个属...

  • iOS - 自动提示宏的设置

    自动提示宏:就是在输入宏的时候有提示功能 应用场景: 想输入对象的属性的时候有提示 示例 自动提示宏:(objc....

  • 自动提示`宏`

    自动提示宏:能在输入宏的时候像属性一样让XCode有提示功能 解析 第一步:定义一个宏 define keyPat...

  • 自动提示宏

    自动提示宏:能在输入属性字符串的时候像属性一样让Xcode有提示功能 一.宏代码: 比如监听view的frame的...

  • IOS NSLog宏定义

    IOS NSLog宏定义 标签(空格分隔): IOS IOS NSLog宏定义 宏定义NSLog方法,不用加";"...

  • iOS const、宏、static、extern的关系

    iOS const、宏、static、extern的关系 iOS const、宏、static、extern的关系

  • IOS宏用法

    iOS宏的经典用法Apple的习惯attribute iOS宏的经典用法1.常量宏、表达式宏 define kTa...

  • iOS版本更新逻辑

    一、系统支持自动更新 首先iOS系统中是支持APP的自动更新的,可以开关选择 二、APP内部提示更新 若用户没有选...

网友评论

    本文标题:iOS - 自动提示宏

    本文链接:https://www.haomeiwen.com/subject/vdlpzftx.html