В настоящее время я погружаюсь в RxSwift и пытаюсь использовать его для обновления TableView на ViewController (.xib) данными, полученными из JSON и закодированными в структуру с помощью Codable.
Вот мой виртуальный банкомат:
import Foundation
import RxCocoa
import RxSwift
protocol MenuViewModelProtocol {
func viewDidLoad()
}
class MenuViewModel: MenuViewModelProtocol {
private (set) var menu = MenuModel()
private let menuIntermediary = MenuDataIntermediary()
func viewDidLoad() {
debugPrint("MenuViewModel.viewDidLoad: Async request for menu was made")
requestAndSetMenuToIntermediary { (_ success) in
switch success {
case true:
debugPrint("MenuViewModel.requestAndSetMenuToIntermediary: Did get Menu successfully")
// print(self.menu) // -> menu is here
case false:
debugPrint("MenuViewModel.requestAndSetMenuToIntermediary: Did not get Menu successfully")
}
}
}
private func requestAndSetMenuToIntermediary(completion: @escaping (_ success: Bool) -> Void) {
menuIntermediary.jsonDataToMenuConversion { [weak self] (success) in
DispatchQueue.global().async {
guard let strongSelf = self else {
debugPrint("MenuViewModel.requestMenuToIntermediary: couldn't create a strong self reference")
completion(false)
return
}
guard let menu = menu else {
debugPrint("MenuViewModel.requestMenuToIntermediary: couldn't unwrap menu data")
completion(false)
return
}
strongSelf.menu = menu
// print(strongSelf.menu) // -> menu is here
completion(true)
}
}
}
}
Поток данных requestAndSetMenuToIntermediary коротко:
-> DataManager запрашивает JSON из URL и возвращает данные?
-> Промежуточный слой анализирует JSON на Struct (с вложенными структурами), используя Codable, и возвращает Struct?
-> ViewModel получает структуру?и разворачивает его, будучи готовым к настройке пользовательского интерфейса.
-> ??
Моя проблема в '??'должен уведомить VC, что меню было обновлено, чтобы настроить TableView.Какие-либо предложения?Я пытался использовать PublishSubjects, BehaviorSubject в сочетании с наблюдаемыми, но я не могу заставить его работать.Я сомневаюсь, что это синтаксис или что-то, связанное с фоновым потоком ...
Заранее спасибо!Ps - если нужна дополнительная информация, я могу с радостью ее предоставить, я просто пытался не делать очень длинную запись: p