在Objective-C中使功能全局可用

时间:2013-08-21 10:50:06

标签: objective-c

在之前的项目中,我在AppDeligate.m中定义了此功能,并且全局可用于应用的所有部分:

#define UIColorFromRGB(rgbValue) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

现在由于某种原因,当我将此代码放在一个新项目中时,只有特定的类可以看到该函数,但是子类没有看到它。

如何使此功能全局可用?

4 个答案:

答案 0 :(得分:7)

您可以在项目的.pch文件中定义宏,但这通常是个坏主意,因为它会生成难以阅读,维护和调试的代码。

在您的具体情况下,我宁愿在UIColor上创建一个类别。

这是一个带有额外内容的实现,可能会派上用场。

的UIColor + Extra.h

#import <UIKit/UIKit.h>

@interface UIColor (Extra)
+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue;
+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue alpha:(CGFloat)alpha;
+ (instancetype)extra_colorWithHex:(NSInteger)hex;

@end

的UIColor + Extra.m

#import "UIColor+Extra.h"

@implementation UIColor (Extra)

+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue {
    return [self colorWith255BasedRed:red green:green blue:blue alpha:1.0];
}

+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue alpha:(CGFloat)alpha {
    return [self colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha];
}

+ (instancetype)extra_colorWithHex:(NSInteger)hex {
    return [UIColor colorWith255BasedRed:((hex & 0xFF0000) >> 16) green:((hex & 0xFF00) >> 8) blue:(hex & 0xFF)];
}

@end

然后放置

#import "UIColor+Extra.h"

在您的.pch文件中,并在其他地方使用。

实施例

UIColor * cyan = [UIColor extra_colorWithHex:0x00FFFF];
UIColor * magenta = [UIColor extra_colorWith255BasedRed:255 green:0 blue:255];

答案 1 :(得分:2)

如果您将文件添加到YOURPROJECTNAME-Prefix.pch,它将被添加为预编译的标头,并且可用于所有代码文件。

答案 2 :(得分:0)

Audun Kjelstrup有最好的答案。

您还可以选择在类中设置静态方法。

+ (UIColor *)UIColorFromRGB {}

答案 3 :(得分:0)

我同意Gabriele关于宏(不合需要的功能)以及你想要做的事情在一个类别中会很好/适当。但是,我还想指出Objective-C也可以做C风格的功能(而不是你所显示的宏)。

例如:

// Header
UIColor * UIColorFromRGB(NSInteger rgbValue);

// Implementation
UIColor * UIColorFromRGB(NSInteger rgbValue)
{
    return [UIColor colorWithRed: ((float)((rgbValue & 0xFF0000) >> 16))/255.0
                           green: ((float)((rgbValue & 0xFF00) >> 8))/255.0 \
                            blue: ((float)(rgbValue & 0xFF))/255.0 alpha:1.0];
}