使用字符串常量

时间:2012-03-09 00:26:20

标签: objective-c cocoa nsstring

我在多个文件中引用了 ground air 。它通常用于此上下文,但并非总是如此。

if ([transport.type isEqualToString:@"ground"]) {
  // do something for automobiles
}
else if ([transport.type isEqualToString:@"air"]) {
  // do something else for planes
}
else {
  // we don't care
}

我应该使用字符串常量来表示 ground air 所以如果我更改了它们的文字,我只是在一个地方更新它? e.g。

NSString * const TransportGround = @"ground";
NSString * const TransportAir = @"air";

然后我决定将地面重命名为 wheel ,然后我只更新上面的字符串常量。

3 个答案:

答案 0 :(得分:1)

如果你在很多地方使用String,那么创建一个常量并返回参考它是有益的,主要是因为你改变它就像你提到的那样,而不是硬编码每个实例。如果您只在几个地方使用该字符串,则可能没有必要。真的,这是一种风格决定。

答案 1 :(得分:1)

从代码维护的角度来看,这可能是一个好主意 - 特别是如果您以后可能会更改这些文字。如果这些字符串用于向用户显示,并且您认为将来可能希望将程序翻译成多种语言,则此功能特别有用。

如果您只打算一次使用这些文字,或者不打算更改它们,那么它可能不是一个好主意,因为将代码放在许多不同的地方会使代码更难以读取比直接内联字符串常量。

如果你问的是它对最终程序有什么影响,答案是否定的。在这两种情况下,文字都放在字符串池中,程序将从那里加载它,无论它是内联字符串常量还是在别处定义为字符串常量。

答案 2 :(得分:0)

听起来像定义你提出的常量一样是个好主意,很可能是Transport类。

虽然将其整合到一个位置可以使长期管理更加轻松,但它还可以帮助防止在您拼错其中一个单独的@"ground"@"air"实例时出现的错误。

例如,如果在其中一个检查传输类型的类中,并且您意外地将@"air"拼错为@"iar",则代码将无法按预期执行,也不会发出任何警告或生成错误。通过使用定义的常量,您可以获得编译器的帮助,以确保正确拼写定义的常量。例如,您无法将TransportAir拼写为TransportIar,因为编译器在您尝试编译时会发出错误。