import Foundation
import RxSwift
import RxCocoa
class MainViewModel {
private let networkManager = NetworkManager.shared
private let disposeBag = DisposeBag()
var pokemonList: BehaviorSubject<[PokemonListItem]> = BehaviorSubject(value: [])
var error: PublishSubject<String> = PublishSubject()
private var limit: Int = 20
private var offset: Int = 0
func fetchPokemonList() {
let endpoint = PokemonAPI.fetchPokemonList(limit: limit, offset: offset)
networkManager.fetch(endpoint: endpoint, type: PokemonList.self)
.subscribe{ [weak self] result in
switch result {
case .success(let pokemonListData):
self?.pokemonList.onNext(pokemonListData.results)
case .failure(let error):
self?.error.onNext(error.localizedDescription)
}
}
.disposed(by: disposeBag)
}
}
pokemonList
라는 Subject에 넣으면, View가 그 데이터를 받아 업데이트할 수 있다.error
라는 Subject를 통해 View에게 전달한다.pokemonList
에 저장.error
로 전달.limit
)와 어디서부터 가져올지(offset
)을 관리한다.offset
값을 조정하는 메서드를 추가하면 된다.이 MainViewModel
은 View와 네트워크(API) 사이의 중간다리 역할을 하며, 데이터 요청, 데이터 관리, 에러 처리를 책임지고 있다.