【问题标题】:Objective-C constants in protocol协议中的 Objective-C 常量
【发布时间】:2011-01-11 14:45:23
【问题描述】:

在我的 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_SIZEMYPROTOCOL_BOUNDS中的值。

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

【问题讨论】:

  • 或许您应该用 Google 搜索一下 C 编程语言中使用的 const 关键字的含义?

标签: objective-c nsstring constants protocols


【解决方案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 作为只读访问器的抽象类?

【讨论】:

  • 是的,我需要一个协议,而你对常量字符串的看法是正确的......我这样做是有原因的,主要是因为我将它作为另一个 java 项目移植。 ..这本质上是一个类型的迷你字典...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多