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

可以說是玩家的財產控制檯是一個List<console>()RealmSwift ALL謂詞

所以我想過濾其既有的Xbox和PlayStation 4,目前我能夠通過或比較來過濾他們所有的球員,我的目標是實現AND比較,例如目前它只檢查玩家控制檯中是否存在「xbox」或「playstation 4」。我想要返回擁有兩個遊戲機的玩家。 任何幫助或提示將不勝感激

回答

2

爲了讓那些有兩種類型的控制檯,你需要「和」他們。你需要「或」他們在一起,如果想要那些有選擇的,還有。如果你「和」他們你必須有兩個或它不會被包括在內,如果你是「或者」他們,如果存在的話,它將被包括在內。

所以你需要創建一個複合「或」謂詞。您爲每個要包含的案例創建一個謂詞,然後使用複合謂詞將所有謂詞「或」[或「和」]結合在一起。

我根據上面提供的內容做了一些猜測,但這應該非常接近。讓我知道是否需要澄清或清理。它編譯,但我沒有爲它創建一個測試數據集。用尖括號>內的<變量替換變量名稱(用於領域對象)和類名稱。

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 .and。其餘的很容易做出CompoundPredicate – ivan123

+0

非常好!很高興你解決了它!很容易忘記NSCompoundPredicate可用。它在您需要時派上用場。 – Mozahler