33668


Swift初学者ですが、データ保存にRealmの利用してアプリを開発しようと思っています。

Realmで保存したデータを読み出す際、Stringの項目に対して「○○以降」という抽出をかけたいのですが、  
filterで比較演算子”>=”を記述したところ、下記エラーとなりました。

[code]

    class realmLog: Object {
      dynamic var stringItem = String() //項目をStringで宣言
    }
    
    ・・・
    
    /* 抽出結果の取得 */
    let realmRec = realm.objects(realmLog.self).filter("stringItem >= \"\(Condition)\"")
    
[/code]

> 'Invalid operator type', reason: 'Operator '>=' not supported for string
> type'

RealmでString項目に対し「○○以降」という抽出をかけるにはどのように記述すればよいのでしょうか。

あるいはRealmで一旦全件抽出を行い、別途抽出結果に対して「○○以降」という条件で読み飛ばすような処理を記述すべきでしょうか。


CC BY-SA 3.0
2017-03-31T01:31:37.947
33660
2017-03-31T08:47:50.997
2017-03-31T06:03:02.343
76
21293
question
swift realm
Stringの大小比較の方法について


Stringのプロパティに対して大小比較はできないので、代わりにソートして上から（もしくは下から）使うのが良いと思います。

[code]

    let realmRec = realm.objects(realmLog.self).sorted(byKeypath: "stringItem")
    
[/code]

^ Realmは遅延ロードが自動的に働くので、抽出しなくても実際に使った（アクセスした）ぶんだけのメモリ消費しかありません。

あと、filterの条件をSwiftのString Interpolationを使ってますが、一般的にString
Interpolationをクエリの組み立てなど重要な部分に使用するのはバグの元なので、NSPredicateの置き換えを利用して、

[code]

    .filter("stringItem >= %@", Condition)
    
[/code]

と書いてください。


CC BY-SA 3.0
2017-03-31T08:47:50.997
33668
2017-03-31T08:47:50.997
5519
33660
answer