Realmでデータを取得するとResults型で返却されますが、Realmで定義された型を使いたくない時の内容になります。
目的
Realmで取得した内容はRealmSwift.Results
型で返却されます。ただ、レイヤーアーキテクチャで言うとインフラ層に位置するので、個人的にView, ViewModelで扱うのは抵抗があります。そのため、View, ViewModelでは独自に定義した型に変換して使用したいです。
内容
データモデルは以下のように定義します。
# 独自の型
struct MyTask {
let id: String
let title: String
let finished: Bool
}
# RealmのModel
final class ReMyTask: Object {
@objc dynamic var id = UUID().uuidString
@objc dynamic var title = ""
@objc dynamic var finished = false
override static func primaryKey() -> String? {
return "id"
}
}
以上のReMyTask
に変換する処理を追加します。
final class ReMyTask: Object {
@objc dynamic var id = UUID().uuidString
@objc dynamic var title = ""
@objc dynamic var finished = false
override static func primaryKey() -> String? {
return "id"
}
var taskStruct: MyTask {
get {
return MyTask(id: self.id, title: self.title, finished: self.finished)
}
}
}
使い方は以下のように行います。
let realm = try! Realm()
let tasks = realm.objects(ReMyTask.self)
# MyTaskのstructで返却される
Array(tasks).map({ (data: ReMyTask) in data.taskStruct })
まとめ
実はこの記事を書いている日に初めてRealmを使い始めたので、アンチパターンであるなら申し訳ないです。ただ、RealmSwift.Results
が広範囲で使われることで保守しずらくなりそうだなと感じたのでこのような記事にしました。