【发布时间】:2016-05-18 18:10:09
【问题描述】:
我有一个像这样使用的预处理器宏:
@implementation MyClass
- (void)methodA
{
MyLog("Hello, method A!");
}
- (void)methodB
{
MyLog("Hello, method %@!", @"B");
}
@end
宏展开后的样子:
@implementation MyClass
- (void)methodA
{
; NSLog([NSString stringWithFormat:@"%s - %@", __func__, "Hello, method A!"]); ;
}
- (void)methodB
{
; NSLog([NSString stringWithFormat:@"%s - %@", __func__, "Hello, method %@!"], @"B"); ;
}
@end
这将导致这些被打印为各自的方法:
-[MyClass methodA] - Hello, method A! -[MyClass methodB] - Hello, method B!
我想将其更改为一组 Objective-C 或 Swift 方法,我可以用相同的方式调用它们,并得到相同的结果。我不想管理一个对象,所以这些应该是类/静态方法。 是否可以告诉我我在一个特定的类/方法中并且只在其中使用特定的日志前缀?
如果没有,有没有其他方法可以使用方法来模仿我通过宏实现的行为?
【问题讨论】:
-
试试看here (objective-c),你应该会找到你要找的东西(除非我误解了)。您可以根据您的构建上下文(调试与发行版)自动为此定义宏。
-
分号是什么鬼?不要那样做。
-
@AMomchilov 这些是因为宏在它们的语句之前和之后都有一个分号(以防止扩展语法错误;使用
do { ... } while(0)的原因相同)。因此,当我输入带有分号的宏时,所有三个都以扩展形式出现。 -
@YvesLeBorg 似乎只是打印出日志方法的名称:P
标签: objective-c swift c-preprocessor