【发布时间】:2017-01-23 16:32:49
【问题描述】:
我已经看到了很多定义常量的答案,只需在 .h 文件中使用 extern int const Something 并在 .m 文件中使用 int const Something = 1。
但问题是 - 这些不是类常量,我不能将它们与 .表示法或使用其他机制来区分所属类。
例如,
ClassA.h
extern int const SomeErrorCode;
ClassB.h
extern int const SomeErrorCode;
然后我有 ClassC.m 我想同时使用 ClassA 和 ClassB 并检查它们的方法错误代码:
#import <ClassA.h>
#import <ClassB.h>
@implementation ClassC
-(void)doIt
{
ClassA * objA = [[ClassA alloc] init];
ClassB * objB = [[ClassB alloc] init];
int resultA = [objA doSomething];
// how do I check for resultA == ClassA.SomeErrorCode ?
int resultB = [objB doSomething];
// how do I check for resultB == ClassB.SomeErrorCode ?
}
@end
如果 ClassA.SomeErrorCode 和 ClassB.SomeErrorCode 具有不同的值,如何确保我可以同时使用这两个类并且不会发生冲突?
【问题讨论】:
-
当我使用
extern时,我使用前缀(就像我创建类时所做的那样),并给出将它们链接到定义它们的类的名称,如果是,则使用“k” const,而不是如果它们是静态的。喜欢extern int const kAFMyClassAErrorCode -
你有没有想过为什么它们是命名为
UITextFieldTextDidChangeNotification而不是TextDidChange的常量? -
是的,这让我觉得“哎呀,Objective-C 太乱了”。如果没有其他更清洁的选择,我想我必须习惯它。
-
不是“乱七八糟”,Objective-C和它的“规则”相当“冗长”,这只是一种习惯。另外,命名方法,var 也不能掉以轻心。
标签: objective-c class constants collision naming