8
8
import UIKit
9
9
import RxSwift
10
10
import RxCocoa
11
+ import RealmSwift
12
+
11
13
12
14
final class WorksIndexViewController : UIViewController {
13
15
16
+ var realm : Realm !
17
+
14
18
private let activityIndicator = UIActivityIndicatorView ( )
15
19
16
20
private let repository : AnnictDataRepository
@@ -58,6 +62,9 @@ final class WorksIndexViewController: UIViewController {
58
62
super. viewDidLoad ( )
59
63
setComponent ( )
60
64
65
+ realm = try ! Realm ( )
66
+
67
+
61
68
//お気に入りの状態に変更があった時
62
69
worksIndexModel. favoriteValueChanged
63
70
. subscribe (
@@ -77,12 +84,30 @@ final class WorksIndexViewController: UIViewController {
77
84
let value = favoriteWorks. value + [ work]
78
85
favoriteWorks. accept ( value)
79
86
// ② work をRealmに新しく追加する
87
+ let newRealmWork = RealmWork ( )
88
+ newRealmWork. id = work. id
89
+ newRealmWork. title = work. title
90
+ newRealmWork. image = work. image. recommendedUrl ?? " undefined "
91
+
92
+ try ! self . realm. write {
93
+ self . realm. add ( newRealmWork)
94
+ }
80
95
}
81
96
else {
82
97
//お気に入り解除された時
83
98
let value = favoriteWorks. value. filter ( { $0. id != work. id } )
84
99
favoriteWorks. accept ( value)
85
100
// ③work をRealmから削除する
101
+ //全部取得
102
+ let testRealm = self . realm. objects ( RealmWork . self)
103
+ //lazyを解消するためにcompactMapしてる
104
+ guard let selectedItem = testRealm. filter ( { $0. id != work. id } ) . compactMap ( { $0} ) . first else {
105
+ return
106
+ }
107
+
108
+ try ! self . realm. write {
109
+ self . realm. delete ( selectedItem)
110
+ }
86
111
}
87
112
88
113
if callingVC == . favorite {
@@ -106,10 +131,13 @@ final class WorksIndexViewController: UIViewController {
106
131
107
132
// ① Realmからデータを取り出す。(API取得の前に行う⇨そのデータを用いてtrueかfalseか判断できるようにするため)
108
133
// Realm(DB)からお気に入りデータを取り出す。
134
+ let realmData = self . realm. objects ( RealmWork . self)
109
135
// Result<AnnictData> -> works [Work]
136
+ let favoritesArray : [ WorkForDisplay ] = realmData. compactMap ( {
137
+ WorkForDisplay . init ( id: $0. id, title: $0. title, image: Image ( url: $0. image) , isFavorited: $0. isFavorite)
138
+ } )
110
139
111
- // favoriteWorksの中にそのデータを入れる。
112
- // worksIndexModel.favoriteWorks.accept(works)
140
+ self . worksIndexModel. favoriteWorks. accept ( favoritesArray)
113
141
114
142
//21個のアニメのデータを一覧画面用に取得
115
143
fetchAPI ( )
0 commit comments