//header-file
#import <Foundation/Foundation.h>
extern UIColor *const COLOR_BACKGROUND;
//implementation-file
#import "Constants.h"
UIColor *const COLOR_BACKGROUND= [UIColor greenColor];
如果您使用.m文件尝试此操作,则会出现错误,因为它不是编译时常量。将实现文件更改为.mm可以解决此问题。 但是我应该注意到的任何怪癖(我对c ++一无所知,我没有看到有人这样做)?
答案 0 :(得分:2)
在我看来,有两个缺点:
C ++中一个众所周知的静态初始化问题是初始化顺序。使用颜色或字体时,这可能没什么大不了的。但是当你自己的对象被涉及时,当一个实例的构造函数访问另一个静态对象时,它很快就会变得一团糟。
如果使用此样式,则必须使用Objective-C ++。不使用(纯)当与其他开发人员一起工作或使用来自其他地方的代码时,Objective-C很容易出错且容易出错。这两种语言之间存在很多微妙的差异,其中很多都会让你感到厌烦,特别是如果你对这两种语言都不是很有经验的话。
有些情况下使用Objective-C ++是值得的,但我不会仅仅为了方便而使用它。
答案 1 :(得分:1)
反对此的论据将基于风格。从功能上讲,它会像你期望的那样工作,而且存在的缺陷与你编写纯C ++代码时的缺陷是一样的......
Quirk你应该知道:Objective-C众神的愤怒,以及任何了解Objective-C的上司。
我可以推荐[CIColor colorWithString:(NSString *)],并将常量颜色存储为NSString,作为完成您希望完成的目标的Objective-C方式。注意,UIColor类有一个initWithCIColor方法。您可以使用这一系列逻辑来创建UIColors的局部常量变量,并安抚Objective-C的霸主。
喜欢SO:
//.h
extern NSString *const COLOR_STRING;
//.m
NSString *const COLOR_STRING = @"SOME_COLOR";
@implementation ModalDelegate
- (id)init
{
CIColor *const MY_COLOR = [CIColor colorWithString:COLOR_STRING];//Can easily be made a UIColor instead, though unfortunately there is no "UIColor fromString" method.
self = [super init];
return self;
}