ObjecTips

Swift & Objective-C で iOS とか macOS とか

システムと同じ並びに日本語の文字列をソートする

NSString の比較メソッド一覧

- (NSComparisonResult)compare:(NSString *)string;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToCompare;
- (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)rangeOfReceiverToCompare locale:(nullable id)locale;

- (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
- (NSComparisonResult)localizedCompare:(NSString *)string;
- (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;

- (NSComparisonResult)localizedStandardCompare:(NSString *)string API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

例として iOS の読み上げ言語の設定画面(設定>アクセシビリティ>スピーチ>声)

f:id:Koze:20180119121548j:plain

テストコード

String sort similar to iOS.

カタカナの部分に関してはいずれも差異は無いが、漢字のソート結果が違っている。
localizedCompare:localizedStandardCompare: は漢字の部分もOSと並びが合っている。
localizedStandardCompare: のドキュメントを見ると

This method should be used whenever file names or other strings are presented in lists and tables where Finder-like sorting is appropriate.

Finder-like との事なので iOS, macOS のシステムの表示に合わせるには localizedStandardCompare: を使うのが良さそう。