2017-07-26 10 views
1
let selectedConsoles = ["Xbox", "Playstation 4"] 
let players = realm.objects(Person).filter("consoles IN %@", selectedConsoles) 

は、そのプレイヤーのプロパティコンソールを言うことができますが、だから私は現在、私は、OR比較することによって、それらをフィルタリングすることができるよ通Xboxやプレイステーション4の両方を持っているすべてのプレーヤーをフィルタリングしたいList<console>()RealmSwift ALL述語

です私の目標は、AND比較を達成することです。例えば、現在のところ、プレイヤーのコンソールに「Xbox」または「プレイステーション4」が存在するかどうかを確認するだけです。私は両方のコンソールを持っているプレイヤーに戻したい。 ヘルプやヒントがあれば幸いです。

答えて

2

コンソールの両方のタイプのユーザーを取得するには、「と」を入力する必要があります。いずれかを選択したものが必要な場合は、それらを一緒に "または"一緒にする必要があります。あなたとあなたが両方を持っていなければならない、あるいはあなたが含まれていない場合は、どちらかが含まれています。

したがって、化合物 "または"述語を作成する必要があります。組み込みたい場合ごとに述部を作成し、複合述部を使用してすべての述部を一緒に "または" [または "と]結合します。

私はあなたが上記で提供したことに基づいていくつかの推測をしていますが、これは非常に近いはずです。清算や清掃が必要な場合は教えてください。それはコンパイルされますが、私はそのためのテストデータセットを作成しませんでした。変数名(realmオブジェクトの場合)と、変数のクラス名を山括弧>で置換します。

let selectedConsoles = ["Xbox", "Playstation 4"] 
    let predicateOne = NSPredicate(format:"consoles IN %@", [selectedConsoles[0]]) 
    let predicateTwo = NSPredicate(format:"consoles IN %@", [selectedConsoles[1]]) 
    let compoundPredicateEitherConsole = NSCompoundPredicate(orPredicateWithSubpredicates: [predicateOne, predicateTwo]) 
    let compoundPredicateBothConsoles = NSCompoundPredicate(andPredicateWithSubpredicates: [predicateOne, predicateTwo]) 
    let results = <realm>.objects(<YourClassName>.self).filter(compoundPredicateEitherConsole) 
+0

ありがとう私はちょうど同じことをして、それが動作した、私はNSCompoundPredicateがLogicalTypeと。そして残りは簡単にCompoundPredicateを作った – ivan123

+0

優秀!あなたがそれを解決してうれしい! NSCompoundPredicateが利用可能であることを忘れるのは簡単です。必要なときに便利です。 – Mozahler