@@ -17,6 +17,10 @@ class QuestionsViewController: UIViewController {
1717 fileprivate let questionDataManager = QuestionsDataManager ( )
1818 fileprivate var questions = [ Question] ( )
1919
20+ fileprivate var pageIndex : Int = 0
21+ fileprivate var retrievingQuestions : Bool = false
22+ fileprivate var hasMoreQuestionsToBeRetrieved : Bool = true
23+
2024 // MARK: - ViewLifecycle
2125
2226 override func viewDidLoad( ) {
@@ -27,21 +31,29 @@ class QuestionsViewController: UIViewController {
2731 tableView. rowHeight = UITableViewAutomaticDimension
2832 tableView. estimatedRowHeight = 120
2933
30- retrieveQuestions ( )
34+ retrieveQuestions ( pageIndex : pageIndex )
3135 }
3236
3337 // MARK: - Questions
3438
35- private func retrieveQuestions( ) {
39+ private func retrieveQuestions( pageIndex: Int ) {
40+ guard retrievingQuestions == false else {
41+ return
42+ }
43+
44+ retrievingQuestions = true
3645 tableView. tableFooterView = loadingFooterView
37- questionDataManager. retrievalQuestions { ( result) in
46+ questionDataManager. retrievalQuestions ( pageIndex : pageIndex ) { ( result) in
3847 self . tableView. tableFooterView = nil
48+ self . retrievingQuestions = false
3949 switch result {
4050 case . failure( let error) :
41- print ( " Error : \( error) " )
51+ print ( " ERROR : \( error) " )
4252 self . tableView. tableFooterView = self . errorFooterView
43- case . success( let questions) :
44- self . questions = questions
53+ case . success( let page) :
54+ self . hasMoreQuestionsToBeRetrieved = page. hasMore
55+ self . pageIndex += 1
56+ self . questions. append ( contentsOf: page. questions)
4557 self . tableView. reloadData ( )
4658 }
4759 }
@@ -67,6 +79,15 @@ extension QuestionsViewController: UITableViewDataSource {
6779
6880 return cell
6981 }
82+
83+ func tableView( _ tableView: UITableView , willDisplay cell: UITableViewCell , forRowAt indexPath: IndexPath ) {
84+ let row = indexPath. row
85+ let triggerRetrievalFromLimit = 15
86+
87+ if hasMoreQuestionsToBeRetrieved && ( triggerRetrievalFromLimit > ( questions. count - row) ) {
88+ retrieveQuestions ( pageIndex: pageIndex)
89+ }
90+ }
7091}
7192
7293// MARK: - UITableViewDelegate
0 commit comments