[英]How to query List<Int> on Realm Swift
如何過濾具有給定Int的RealmFilter.objectIds?
func delete(ids: [Int]) {
let filterResultsToDelete = realm.objects(CRMRealmFilterResult.self).filter("ANY objectIds IN %@",ids)
//Crashes
}
class RealmFilterResult : Object {
@objc dynamic var filterId: Int = 0
let objectIds = List<Int>()
override static func primaryKey() -> String {
return "filterId"
}
}
Realm尚不支持查詢基元List
(即非Object
子類,例如Int
)。
您可以在此GitHub問題上關注此狀態。
這可能根本不是您想要的,但這是一個很好的練習。 也許這會有所幫助。
讓我重申一下我想問的問題:您擁有一系列對象,每個對象都具有Int的List屬性,並且您希望能夠查詢列表中具有特定int的所有對象。
使用一個更真實的示例,假設我們有一個團隊列表,並且在每個團隊中保留了一個游戲得分列表(一個列表)
class TeamObject: Object {
@objc dynamic var object_id = NSUUID().uuidString
let scoreList = List<ScoreObject>()
override static func primaryKey() -> String? {
return "object_id"
}
}
並且我們有一個得分對象,該得分對象將得分存儲為Int(以及其他詳細信息,例如他們玩的人或日期)
class ScoreObject: Object {
@objc dynamic var score = 0
let teamsWithScores = LinkingObjects(fromType: TeamObject.self, property: "scoreList")
}
為了簡單起見,讓我們創建三個得分和兩個團隊,並在列表中給每個團隊兩個得分。
let score1 = ScoreObject()
score1.score = 1
let score2 = ScoreObject()
score2.score = 2
let score3 = ScoreObject()
score3.score = 3
let t1 = TeamObject()
t1.scoreList.append(score1)
t1.scoreList.append(score3)
let t2 = TeamObject()
t2.scoreList.append(score2)
t2.scoreList.append(score3)
並將它們寫入領域
try! realm.write {
realm.add(t1)
realm.add(t2)
}
從那里,我們可以獲得得分為1的任何團隊,這解決了獲取具有包含給定int列表的對象的問題。
let results = realm.objects(ScoreObject.self).filter("score IN %@", [1])
if results.count > 0 {
for aScore in results {
let teamsWithThisScore = aScore.teamsWithScores
for team in teamsWithThisScore {
print("score: \(aScore.score)")
print(" id: \(team.object_id)")
}
}
} else {
print("no teams with those scores")
}
您可以對此進行擴展以獲取具有多個得分(整數)的團隊(對象)
let results = realm.objects(ScoreObject.self).filter("score IN %@", [1,3])
正如我說的那樣,它可能不是基礎,但它確實以面向對象的方式提供了一種解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.