我发现可以在Objective C中使用#define
来缩小更长的功能,但我不确定它在这里做了什么:
#define S(s) @#s
稍后在代码中,开发人员将其用于:
self.scopeDisplayNames = @[S(SPTAuthUserReadPrivateScope), S(SPTAuthUserReadEmailScope)];
我对它的作用感到非常困惑。另外,有没有办法在Swift中执行此操作?
谢谢!
答案 0 :(得分:3)
它声明了一个宏函数,可以将参数转换为NSString
字面值。例如,S(hi)
会扩展为@"hi"
。
供参考:
要回答你的第二个问题,我所知道的Swift无法做到这一点。无论如何,这两种语言都不是一个好主意。
答案 1 :(得分:1)
@Adrian的答案是正确的,但我认为这一点很缺点,评论也是如此。
查看代码示例:
self.scopeDisplayNames = @[S(SPTAuthUserReadPrivateScope), S(SPTAuthUserReadEmailScope)];
SPTAuthUserReadPrivateScope
是Spotify SDK中NSString *
类型的全局常量。宏调用:
S(SPTAuthUserReadPrivateScope)
扩展为:
@"SPTAuthUserReadPrivateScope"
这是变量名称作为字符串。
为什么不直接把它写成字符串?
因为如果你这样做,你可能会产生一个简单的拼写错误,编译器无法捕获它。通过使用宏,Xcode的自动完成支持参数 - 只需输入名称。
因此,当需要将变量的名称作为字符串时,宏是一种避免意外拼写错误的方法。
以下是Xcode中的自动完成功能:
自动弹出自动完成框。如果你开始输入一个字符串常量,例如@"SPT
,然后自动完成不会自动激活,但您可以通过点击转义键来调用它。
HTH