前回、RealmSwift で配列を扱う記事を書きましたが、それを検索できる方法を書き記します!
意外と有力な情報がなくて困りました。(検索能力の低さ
前提条件
前回例えたメモだとやりづらいので、図書館のシステム的なノリでいきます。
class Library: Object {
let books = List()
}
class Book: Object {
@objc dynamic var uniqueId = ""
@objc dynamic var title = ""
@objc dynamic var author = ""
@objc dynamic var circulationRecrords = 0
override static func primaryKey() -> String {
return "uniqueId"
}
}
Libraryクラス(図書館)で本(Bookクラス)を管理していると思ってください。
で!
検索方法として僕の中ですっきり書けるなと思ったのが、サブクエリです。
検索方法
例えば、岸川克己さんが書いた本を探したい場合。
do {
let realmDB = try Realm()
let objects = realmDB.objects(Library.self).filter("SUBQUERY(books, $book, $book.author = %@).@count >= 1", "岸川克己")
print(objects)
} catch {
print(error.localizedDescription)
}
貸し出し回数が100回以上の本を探したい場合。
do {
let realmDB = try Realm()
let objects = realmDB.objects(Library.self).filter("SUBQUERY(books, $book, $book.circulationRecrords >= 100).@count >= 1")
print(objects)
} catch {
print(error.localizedDescription)
}
ってな感じです。
SUBQUERYを「対象の配列、配列のオブジェクト、オブジェクトのプロパティ、条件」の順で定義してます!
さいごに
“swift realm list search” とかで検索すると、「取得したあとに map をかますと可能です」とかあったのですが、それはあまりやりたくなくて。笑
他にもスマートなやり方があれば教えてください!
br>
違うよ!とかこういう方法あるよ!ってのがあれば教えてください。
では( ¯·ω·¯ )



コメント