C99指定初始化器或各种CGSizeMake,CZRectMake等宏是否更像现代Objective-C中的惯例?
它几乎看起来像个人风格偏好,但我看到的C99风格的一个优点是价值的意图是清晰明确的.
CGRect rect = CGRectMake(x, y, width, height)
Run Code Online (Sandbox Code Playgroud)
如果你混淆了价值的顺序,会给你带来心痛,如:
CGRect rect = (CGRect){.origin.x = x, .origin.y = y, .size.width = width, .size.height = height};
Run Code Online (Sandbox Code Playgroud)
毫无疑问,高度正在获得你给予它的价值.人们继续使用现有宏的原因是什么?
"可可编码公约"的文档中没有任何关于此的内容和我遇到的风格指南之一,它是GitHub风格指南:https://github.com/github/objective-c-conventions
本参考中描述的所有函数都将CGRect数据结构作为输入,在计算结果之前隐式标准化这些矩形.因此,您的应用程序应避免直接读取和写入存储在CGRect数据结构中的数据.相反,使用此处描述的函数来操纵矩形并检索它们的特征.
因此,这些CGRect函数(例如CGRectGetWidth)将确保高度和宽度始终为非负值.(没有 "将CGRect数据结构作为输入"的CGRect函数,如CGRectMake,不会标准化rect的维度.)
此外,现有的功能可以在数据结构发生变化的(事实上极不可能)事件中进行转换.
最后,尽管你提到了Github风格指南,纽约时报Objective-C风格指南建议使用CGRect函数(出于我上面提到的相同的原因).
虽然在从CGRects获取值时可以使用内联函数,并在创建它们时直接使用struct member访问,但这种不一致可能会损害代码的可读性.显然,正如你所提到的,这是一个风格问题.
基本上,它没关系,但使用功能.
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |