Итак, я настраиваю простую архитектуру VIPER в Swift.
Interactor получает некоторые данные из API и передает их докладчику, который затем передает отформатированные данные в представление.
Докладчик обработает данные и просто посчитает количество загруженных объектов. Для этого я сохранил переменную в докладчике. Вопрос должен ли я хранить данные в докладчике?
Interactor:
class Interactor {
weak var presenter: Presenter?
func getData() {
ClosureDataManager.shared.fetchBreaches(withURLString: baseUrl + breachesExtensionURL, completion: { [weak self] result in
guard let self = self else { return }
switch result {
case .failure(let error):
print(error)
case .success(let breaches):
self.presenter?.dataDidFetch(breaches: breaches)
self.presenter?.dataNumberDidFetch(number: breaches.count)
}
})
}
}
Presenter:
class Presenter {
var wireframe: Wireframe?
var view: ViewController?
var interactor: Interactor?
var dataDownloaded = 0
func viewDidLoad() {
print ("presenter vdl")
}
func loadData() {
interactor?.getData()
}
func dataDidFetch(breaches: [BreachModel]) {
view?.dataReady()
}
func showDetail(with text: String, from view: UIViewController) {
wireframe?.pushToDetail(with: text, from: view)
}
func dataNumberDidFetch(number: Int) {
dataDownloaded += number
view?.showData(number: String(dataDownloaded) )
}
}
Просмотр (ViewController)
protocol dataViewProtocol {
func showData(number: String)
}
class ViewController: UIViewController, dataViewProtocol {
@IBOutlet weak var showDetailButton: UIButton!
@IBOutlet weak var dataLabel: UILabel!
// weak here means it won't work
var presenter: Presenter?
@IBAction func buttonPressAction(_ sender: UIButton) {
presenter?.loadData()
}
@IBAction func buttonShowDetailAction(_ sender: UIButton) {
presenter?.showDetail(with: "AAA", from: self)
}
func dataReady() {
showDetailButton.isEnabled = true
}
func showData(number: String) {
dataLabel.text = number
}
override func viewDidLoad() {
super.viewDidLoad()
Wireframe.createViewModule(view: self)
presenter?.viewDidLoad()
}
}
Маршрутизатор (каркас)
class Wireframe {
static func createViewModule (view: ViewController) {
let presenterInst = Presenter()
view.presenter = presenterInst
view.presenter?.wireframe = Wireframe()
view.presenter?.view = view
view.presenter?.interactor = Interactor()
view.presenter?.interactor?.presenter = presenterInst
}
}
Так должен ли докладчик хранить количество загруженных объектов?
Что вы пробовали Я реализовал var, как показано выше. Это минимальный пример проблемы.
Какие ресурсы вы использовали Я смотрел на StackOverflow и гуглил проблему. Я не могу найти ответ, но знаю, что могу сохранить данные в представлении, но я думаю, что это неправильно. Я мог бы хранить количество данных в Interactor, но это также не кажется правильным. Кажется, все это нарушает разделение интересов ...
Я не буду делать вашу домашнюю работу / использовать другую архитектуру / Вы должны использовать протоколы / Почему в вашей реализации есть единый протокол Это не домашняя работа, она для моего собственного самообучения , Для этого могут использоваться другие архитектуры (и кодирование в протоколы - хорошая практика), но речь идет о сохранении переменной в презентаторе. Я хочу знать, должен ли я хранить переменную в презентере, используя VIPER и Swift. Комментарии о пустяках вокруг вопроса редко бывают полезны, если речь идет об именах переменных и т. П.
В чем вопрос? Я хочу знать, смогу ли я сохранить количество загруженных элементов данных в докладчике.