Skip to content

Commit fd631a6

Browse files
AnnictAPIModelでRealm用にイニシャライザを追加してしまったが後ほど変更/Realmに追加削除機能実装
1 parent cd6f932 commit fd631a6

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

Colombia/Sources/View/Home/WorksIndexViewController.swift

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@
88
import UIKit
99
import RxSwift
1010
import RxCocoa
11+
import RealmSwift
12+
1113

1214
final class WorksIndexViewController: UIViewController {
1315

16+
var realm: Realm!
17+
1418
private let activityIndicator = UIActivityIndicatorView()
1519

1620
private let repository: AnnictDataRepository
@@ -58,6 +62,9 @@ final class WorksIndexViewController: UIViewController {
5862
super.viewDidLoad()
5963
setComponent()
6064

65+
realm = try! Realm()
66+
67+
6168
//お気に入りの状態に変更があった時
6269
worksIndexModel.favoriteValueChanged
6370
.subscribe(
@@ -77,12 +84,30 @@ final class WorksIndexViewController: UIViewController {
7784
let value = favoriteWorks.value + [work]
7885
favoriteWorks.accept(value)
7986
// ② 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+
}
8095
}
8196
else {
8297
//お気に入り解除された時
8398
let value = favoriteWorks.value.filter({ $0.id != work.id })
8499
favoriteWorks.accept(value)
85100
// ③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+
}
86111
}
87112

88113
if callingVC == .favorite {
@@ -106,10 +131,13 @@ final class WorksIndexViewController: UIViewController {
106131

107132
// ① Realmからデータを取り出す。(API取得の前に行う⇨そのデータを用いてtrueかfalseか判断できるようにするため)
108133
// Realm(DB)からお気に入りデータを取り出す。
134+
let realmData = self.realm.objects(RealmWork.self)
109135
// 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+
})
110139

111-
// favoriteWorksの中にそのデータを入れる。
112-
// worksIndexModel.favoriteWorks.accept(works)
140+
self.worksIndexModel.favoriteWorks.accept(favoritesArray)
113141

114142
//21個のアニメのデータを一覧画面用に取得
115143
fetchAPI()

0 commit comments

Comments
 (0)