前回、RealmSwift で配列を扱う記事を書きましたが、それを検索できる方法を書き記します!
意外と有力な情報がなくて困りました。(検索能力の低さ
前提条件
前回例えたメモだとやりづらいので、図書館のシステム的なノリでいきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Library: Object { let books = List<Book>() } 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クラス)を管理していると思ってください。
で!
検索方法として僕の中ですっきり書けるなと思ったのが、サブクエリです。
検索方法
例えば、岸川克己さんが書いた本を探したい場合。
1 2 3 4 5 6 7 |
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回以上の本を探したい場合。
1 2 3 4 5 6 7 |
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>
違うよ!とかこういう方法あるよ!ってのがあれば教えてください。
では( ¯·ω·¯ )
コメント