协议中的Objective-C常量

时间:2011-01-11 14:45:24

标签: objective-c nsstring constants protocols

在我的objective-c项目中,我有一个这样的协议:

@protocol MyProtocol

-(id) get:(NSString *) key;

-(void) set:(NSString *) key withValue:(id) value;

-(NSValue *) getSize;

-(void) setSize:(NSValue *) value;

-(NSValue *) getBounds;

-(void) setBounds:(NSValue *) value;

@end

OBJC_EXPORT const NSString *MYPROTOCOL_SIZE;
OBJC_EXPORT const NSString *MYPROTOCOL_BOUNDS;

基本上,这些特定方法(getSizegetBoundssetSizesetBounds)被认为是应该存储在MYPROTOCOL_SIZE中的值和MYPROTOCOL_BOUNDS分别。

但是,我找不到通过连接其他方法的结果来设置这些常量字符串的有效方法,因为当我尝试直接设置它们时,它会给我错误:initializer element is not constant。有没有办法可以保证对象始终被初始化。 (例如在类load方法中),而不必在我的程序运行时手动调用代码?

1 个答案:

答案 0 :(得分:-1)

首先,你应该学习命名约定,对于你拥有的访问者 - (Type);和 - (void)set :( Type)value;而在你的情况下你做了: - (Type)get;和 - (void)set :( Type)value;

我建议你使用@property作为你的大小和边界访问器。

现在关于NSString变量声明中的“const”,它没有意义。 Const适用于其左侧的类型,如果它位于行的开头,则直接在其右侧应用于令牌。所以你所拥有的是一个“const NSString”,它没有意义,因为NSString已经是不可变的,并且将变异消息发送到const对象不会发出任何警告或错误...

你真正想要的是“NSString * const”,它表明指向你的NSString的指针是常量,你只能在初始化时分配它然后它不会改变......

现在关于协议......您确定要在您的情况下使用协议吗?而不是一个将你的2个NSString作为只读访问器的抽象类?