2016-08-02 8 views
0

レルムオブジェクトをソートしようとしています。次のコードは、タイトルのallSongをA〜Zの文字で正しくソートします。レルムの文字列値(ロケール)の配列を並べ替え - Swift

self.allSongs = realm.objects(Song.self).sorted("_title") 

Å、ÄとÖ(ロケール)を含める必要があります。次のコードは動作します。曲を正しくソートします。

realm.objects(Song.self).sort { 
    $0.title.compare($1.title, locale: swedish) == .OrderedAscending 
} 

問題は、私の曲の配列に結果を割り当てることができないということです。この行では、「[Song]タイプの結果を結果に入力できません」というエラーが表示されます。

self.allSongs = realm.objects(Song.self).sort { 
    $0.title.compare($1.title, locale: swedish) == .OrderedAscending 
} 

正しいタイプにキャストする方法はありますか?

答えて

0

レルムは、ロケール依存ソートをネイティブに許可しません(問題realm/realm-cocoa#2004を参照)。使用しているソートは、RealmのものではなくSwift標準ライブラリ(SequenceType.sort()参照)で定義されているメモリ内のものです(Results.sorted(_:)参照)。

Swift.ArrayRealmSwift.Resultsに再割り当てまたはキャストまたは変換することはできません。

Resultsの自動更新や遅延ロードなどの機能を利用するには、正規化された文字列をモデルに格納して、レルムの並べ替えを使用して並べ替える必要があります。レルムに値を格納する前に大文字と小文字の両方の折り畳みを実行するデータモデルでは、普通の文字列と「正規化」バージョンの両方を格納することができます。おそらくCFStringTransformを使用します。その文字列を検索することもできます(検索入力を正規化することもできます)。

+0

このような機能はありませんが、とにかく感謝しています! – atlas

関連する問題