2015-03-12 3 views
3

Многие учебники по UITableView просит нас, чтобы переопределить эту функцию в MyUITableViewController: UITableViewController:Что я делаю в UITableViewController?

override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int { 
    return 10 
} 

Я понимаю, что это реализация метода numberOfRowsInSection в UITableView, но я не понимаю механизма языка.

tableView является наследственным имуществом UITableViewController, а не методом. Итак, как именно работает переопределение?

+1

Это просто ходячий способ помочь быстро соответствовать именам функциональных функций Objective-C. Я считаю, что tableView фактически является функцией и имеет несколько разных наборов параметров, которые, в свою очередь, определяют несколько разных функций. Вы просто переопределяете функцию определенным набором параметров. –

+2

@TravisM. верно. В ObjC имя метода является эквивалентом конкатенации имени функции и всех именованных параметров. –

+0

Но 'tableView' - это не метод. Внутри 'UITableViewController' вы видите' var tableView: UITableView! ' – allenylzhou

ответ

1

UITableViewController соответствует протоколу UITableViewDataSource: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/index.html

tableView является функцией протокола определено в UITableViewDataSource

UITableViewController имеет стандартную реализацию функций протокола, которые MyUITableViewController может override.

3

Цель-C синтаксис этого же метода является

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section; 

, который дает метод подписи tableView:numberOfRowsInSection:

Когда вы привыкли к Objective-C вы вроде мысленно игнорировать tableView: часть и фокус на numberOfRowsInSection.

Когда имя метода Objective-C преобразуется в быстры, первый параметр становится имя метода, так что вы получите tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int

Короткий ответ на ваш вопрос в том, что вы переопределении функции с этой подписью, а не tableView недвижимость

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