0

たとえば、これを使用する理由:

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

このようなものの代わりに:

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

XcodeでNSStringを入力すると、オートコレクトはありませんが、Xcodeは列挙型をオートコレクト/オートフィルするため、多くのエラーを防ぐようです。さらに、列挙型や定数よりも NSStrings を使用する理由が思いつきません。たとえば、SDK の新しいバージョンがリリースされると、Apple は新しい識別子を追加できますが、列挙型でもこれを行うことができます。文字列定数に対する列挙型のもう 1 つの利点は、列挙型をより簡単に比較できることです。

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 に答える