我在UITableViewController中重写了什么?

时间:2015-03-12 23:00:40

标签: ios uitableview swift

很多关于UITableView的教程要求我们在MyUITableViewController: UITableViewController中覆盖这个函数:

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

我理解这是UITableView中numberOfRowsInSection方法的一个实现,但我不懂语言机制。

tableViewUITableViewController的继承属性,而不是方法。那么覆盖是如何工作的呢?

2 个答案:

答案 0 :(得分:3)

同一方法的Objective-C语法是

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

,它提供了tableView:numberOfRowsInSection:

的方法签名

当您习惯于Objective-C时,您会在心理上忽略tableView:部分,并专注于numberOfRowsInSection

当Objective-C方法名称转换为swift时,第一个参数成为方法名称,因此您获得tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int

您的问题的简短回答是您使用该签名覆盖了该函数,而不是tableView属性

答案 1 :(得分:1)

UITableViewController符合UITableViewDataSource协议:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/index.html

tableViewUITableViewDataSource

中定义的协议函数

UITableViewController有一个MyUITableViewController override可以{{1}}的协议函数的默认实现。