Расширение UITableView

indexpath
extension
uitableview

#1

Для быстрого определения последнего индекса данных в таблице. Часто выручает, если требуется быстро проверить вхождение последней ячейки в какое-либо условие проверки:

extension UITableView {
  
  func lastIndexpath() -> IndexPath {
    let section = self.numberOfSections > 0 ? self.numberOfSections - 1 : 0
    let row = self.numberOfRows(inSection: section) > 0 ? self.numberOfRows(inSection: section) - 1 : 0
    return IndexPath(item: row, section: section)
  }
  
}

#2

Сомневаюсь что это целесообразно пихать во вью, это слой data source:

extension UITableViewDataSource where Self: UITableViewController {
    var lastIndexPath: IndexPath {
        let section = max(0, numberOfSections(in: tableView) - 1)
        return [section, max(0, tableView(tableView, numberOfRowsInSection: section) - 1)]
    }
}

Хотя конечно можно поспорить :slight_smile:


#3

А где ты здесь вью увидел? Конечно, это data source :smiling_imp:


#4

UITableView уже не вью?


#5

Вью, но дергать то будем из дата сорса. Ты по другому это видишь? Будет интересно пример посмотреть. Я задрался каждый раз смотреть последнюю ячейку, на разных типах данных. Только после сообразил написать расширение


#6

Да, но метод то у вью.


#7

Может я что и упустил из виду. Не спорю. Дай свой пример данной реализации


#8

Data source это как правило контроллер, проще вызвать методы у контроллера, чем вызывать у вью который вызывает у контроллера.

Ты его лайкнул)


#9

))))

Я не посмотрел, думал ты меня процитировал


#10

Добрый день
А как использовать такое расширение?


#11

ну вот тут все просто
теперь если у вас есть UITableViewController который как мы знаем по умолчанию реализует UITableViewDataSource, то вы смело можете использовать переменную lastIndexPath в своих целях.


#12

я про другой пример

extension UITableViewDataSource where Self: UITableViewController {
    var lastIndexPath: IndexPath {
        let section = max(0, numberOfSections(in: tableView) - 1)
        return [section, max(0, tableView(tableView, numberOfRowsInSection: section) - 1)]
    }
}

#14

а я вам про него и ответил

  extansion UITableViewDataSource where Self: UITableViewController

говорит нам о там что