在Objective-C中的几个类中重复相同的代码

时间:2011-03-01 13:53:48

标签: objective-c logging

我的项目中有两个函数,在几个类中都是相同的。

我无法创建公共基类,因为它们从不同的类继承(一些是UIViewControllers,一些是NSObjects等)。

我尝试过类别,但是再次,因为我没有基类,所以没有一个地方放置它们。我都不希望这些函数在所有UIViewControllers中都可用,因此创建一个类别也无济于事。

如何将此代码添加到我想要的类中而无需复制&粘贴吗


仅供记录,我正在实施dynamic log levels in cocoalumberjack,我需要添加的代码如下:

static int ddLogLevel = LOG_LEVEL_WARN;

+ (int)ddLogLevel
{
        return ddLogLevel;
}

+ (void)ddSetLogLevel:(int)logLevel
{
        ddLogLevel = logLevel;
}

2 个答案:

答案 0 :(得分:1)

或许有点乱,但你可以使用#define。创建一个包含以下内容的头文件:

//LoggingCode.h

#define LOGGING_CODE static int ddLogLevel = LOG_LEVEL_WARN; \
\
+ (int)ddLogLevel \
{ \
    return ddLogLevel; \
} \
\
+ (void)ddSetLogLevel:(int)logLevel \
{ \
    ddLogLevel = logLevel; \
}

每当您想要使用此代码时,请确保包含头文件,并将LOGGING_CODE插入所需的位置。

#include "LoggingCode.h"

LOGGING_CODE

C预处理器将完成剩下的工作。

答案 1 :(得分:0)

由于你不能从公共类继承,你可以创建一个静态类,你可以从其他两个类中调用它。


编辑:

StaticClass.h

+(int)commonddLogLevel;
+(void)commonddSetLogLevel:(int)logLevel;

Class1.h

+(int)ddLogLevel;
+(void)ddSetLogLevel:(int)logLevel;

Class1.m

+(int)ddLogLevel {
    [StaticClass commonddLogLevel];
}

+(void)ddSetLogLevel:(int)logLevel {
    [StaticClass commonddSetLogLevel:logLevel];
}

Class2.h

+(int)ddLogLevel;
+(void)ddSetLogLevel:(int)logLevel;

Class2.m

+(int)ddLogLevel {
    [StaticClass commonddLogLevel];
}

+(void)ddSetLogLevel:(int)logLevel {
    [StaticClass commonddSetLogLevel:logLevel];
}