ios – Swift宏参数

ios – Swift宏参数,第1张

概述我在 Swift中阅读了与Macros相关的所有Q& A,我确实发现Swift中的所有东西现在都是全球性的,我是对的吗? 而我的实际问题是,如果我有一个宏需要参数传递,那我怎么能用Swift语言传递呢? 例如 Objective-C宏 #define COLOR_CODE(红色,绿色,蓝色,alpha)[UIColor colorWithRed:红色/ 255.0绿色:绿色/ 255.0蓝色:蓝色 我在 Swift中阅读了与Macros相关的所有Q& A,我确实发现Swift中的所有东西现在都是全球性的,我是对的吗?

而我的实际问题是,如果我有一个宏需要参数传递,那我怎么能用Swift语言传递呢?

例如

Objective-C宏

#define color_CODE(红色,绿色,蓝色,Alpha)[UIcolor colorWithRed:红色/ 255.0绿色:绿色/ 255.0蓝色:蓝色/ 255.0 Alpha:Alpha]

上面的宏的Swift语法是什么?

解决方法 正如提到的0O0O0O0,“编译器应该看到color_CODE(0,1)并用[UIcolor colorWithRed:0 / 255.0绿色:0 / 255.0蓝色:0 / 255.0 Alpha:1]替换它的宏”在Swift中不存在.

C中的宏可以用于产生令人困惑的错误消息的方式:

#define IS_EQUAL_TO_ME(argument) [self isEqual: argument]BOol func(ID argument) {    return IS_EQUAL_TO_ME(argument);}// Error: Use of undeclared IDentifIEr 'self'

或破坏可读性:

#define OPEN_BLOCK {#define CLOSE_WITH_EXIT_IF_FALSE } else { exit (0); }if (x < 0)OPEN_BLOCK    return 10;CLOSE_WITH_EXIT_IF_FALSE

对于像color_CODE这样的简单情况,C的常用推荐策略是使用内联函数:

NS_INliNE UIcolor *colorCode(CGfloat r,CGfloat g,CGfloat b,CGfloat a) {    return [UIcolor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 Alpha:a];}

这与宏具有相同的性能,因为它将内联到相同的代码但是强类型并且不依赖于宏处理规则.此代码也直接转换为Swift:

func colorCode(red:CGfloat,green:CGfloat,blue:CGfloat,Alpha:CGfloat) -> UIcolor {    return UIcolor(red: red/255,green: green/255,blue: blue/255,Alpha: Alpha)}

因为“一切都是全局的”,您可以在任何文件中声明它并在同一模块中的任何其他文件中使用它.在这种情况下,由编译器来决定是否内联函数.

总结

以上是内存溢出为你收集整理的ios – Swift宏参数全部内容,希望文章能够帮你解决ios – Swift宏参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1012355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存