2012-03-09 81 views
0

我提到了地面空气在多个文件中。它通常在这种情况下使用,但并非总是如此。使用字符串常量

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 
} 

我应该使用字符串常量来表示空气所以如果我改变自己的文字,我只是在一个地方更新呢?例如

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

我再决定我要重新命名,那么我只会更新上面的字符串常量。

+1

声音对我很好。 – 0x8badf00d 2012-03-09 00:28:31

回答

0

听起来像定义像你所建议的常量是一个好主意,很可能在Transport类中。

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

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

1

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

1

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

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

如果您问是否对最终计划有任何影响,答案是否定的。在这两种情况下,文字都被放到字符串池中,程序将从那里加载它,无论是内联字符串常量还是其他地方定义为字符串常量。