0

例如,为什么要使用这个:

NSLocale *l = [[NSLocale alloc] initWithLocaleIdentifier@"en_US"];

而不是这样的:

NSLocale *l = [[NSLocale alloc] initWithLocaleIdentifier:NSLocaleIdentifierUS];

似乎它可以防止很多错误,因为在 Xcode 中键入 NSString 时,没有自动更正,而 Xcode 将自动更正/自动填充枚举。此外,我想不出在枚举或常量上使用 NSStrings 的理由。例如,随着新版本 SDK 的发布,Apple 可以添加新的标识符,但他们也可以使用枚举来执行此操作。枚举相对于字符串常量的另一个好处是可以更容易地比较枚举:

if(userIdentifier == NSLocaleIdentifierUS) {

    //English!
}

此外,对于其他方法,Apple 使用枚举或特定对象作为参数:

NSData *data = [aString dataUsingEncoding:NSASCIIStringEncoding];

如果他们使用字符串作为 localeIdentifier,为什么不这样做:

NSData *data = [aString dataUsingEncoding:@"ascii"];

似乎他们只是不一致。

4

1 回答 1

0

评论建议这个问题有几个答案:

  1. 有数百种语言环境,以及已经存在的语言环境的许多变体(例如,有“en_US”和“en_US_POSIX”,因此创建这么多枚举是不切实际的。
  2. 从 Web 服务读取数据时,使用的格式是“lang_COUNTRY”,因此使用相同的格式以避免每次从 Web 下载语言环境数据时都解析 Web 数据是有意义的。
  3. 字符串是对象,因此可以轻松地将它们存储在集合中,而无需将它们包装在 NSNumber 对象中,就像枚举的情况一样。
于 2012-10-18T03:01:18.763 回答