2015-10-05 1 views
4

Рассмотрим следующий фрагмент, который выводит пользовательский контроллер вида от UITableViewController.Нужно ли мне переводить супер при переопределении источника данных и делегировать методы в UITableViewController?

class Controller: UITableViewController { 
    ... 
) 

// MARK: - Table View Data Source 

extension Controller { 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // call super? 
     ... 
    } 

} 

// MARK: - Table View Delegate 

extension Controller { 

    override func tableView(tableView: UITableView, willBeginEditingRowAtIndexPath indexPath: NSIndexPath) { 
     // call super? 
     ... 
    } 

} 

The documentation говорит:

Вы можете переопределить loadView или любой другой метод суперкласса, но если вы убедитесь, что для вызова суперкласса реализации метода, как правило, в качестве первого вызова метода.

Мой вопрос, означает ли это также к методам в протоколах UITableViewDataSource и UITableViewDelegate, на который UITableViewController соответствует?

Вызов super в методах источника данных не имеет для меня большого смысла, поскольку обычно вы определяете свой собственный контент, используя эти методы. Однако я не уверен в методах делегатов. Вызов super в willBeginEditingRowAtIndexPath например, похоже, не имеет никакого очевидного эффекта.

ответ

0

В этих случаях нет необходимости называть супер. Цитата документации, которую вы включили в свой первоначальный вопрос, относится к переопределению методов суперкласса. Однако UITableViewDataSource и UITableViewDelegate - это протоколы (а не суперкласс класса), и упомянутые вами методы были специально предназначены для вас, чтобы вы реализовали их так, как вам лучше всего.

+0

Но не являются ли методы методов суперкласса методов протокола ('UITableViewController')? Поскольку суперкласс (и только по наследованию является подклассом) является тем, что соответствует протоколам ('UITableViewDelegate' и' UITableViewDataSource'). В противном случае вам не понадобится ключевое слово 'override' при переопределении методов в пользовательском подклассе. – ma11hew28

0

Вы правы, это не имеет смысла делать в этом случае, и вы не должны делать это.

Смежные вопросы