NewsDetailPresenter.swift 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // NewsDetailPresenter.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 06/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import Foundation
  9. import SwiftyJSON
  10. class NewsDetailPresenter {
  11. private let siraniApiServices: SiraniApiServices
  12. weak private var view: NewsDetailViewDelegate?
  13. init(siraniApiServices: SiraniApiServices) {
  14. self.siraniApiServices = siraniApiServices
  15. }
  16. func attachView(view: NewsDetailViewDelegate?) {
  17. self.view = view
  18. }
  19. func detachView() {
  20. self.view = nil
  21. }
  22. func loadData(newsId: Int) {
  23. self.view?.showLoading()
  24. siraniApiServices.postToGetNewsDetail(newsId: newsId).responseJSON { response in
  25. if response.error == nil {
  26. guard let data = response.data else { return }
  27. if let json = try? JSON(data: data) {
  28. let newsDetail = NewsDetail(
  29. id: json["id"].intValue,
  30. title_news: json["title_news"].stringValue,
  31. pra_news: json["pra_news"].stringValue,
  32. news: json["news"].stringValue,
  33. create_date: json["create_date"].stringValue
  34. )
  35. self.setNewsDetail(newsDetail: newsDetail)
  36. } else {
  37. self.showNoData()
  38. }
  39. } else {
  40. self.showNoData()
  41. }
  42. }
  43. }
  44. // other functions
  45. private func setNewsDetail(newsDetail: NewsDetail) {
  46. self.view?.setNewsDetail(newsDetail: newsDetail)
  47. DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
  48. self.view?.hideLoading()
  49. }
  50. }
  51. private func showNoData() {
  52. DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
  53. self.view?.hideLoading()
  54. }
  55. }
  56. }