如果要在子类中提供实现,是否需要为可选函数创建默认实现?
还是我做错了?还是应该归咎于Xcode 10.2?
方案A:
Xcode 10.1:名为viewForHeader
Xcode 10.2:从不调用viewForHeader(运行Release config时),因此屏幕上不显示标题。做了一个断点,打印到控制台。非常有信心它从未被调用过。
class SomeVC: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var tableView: UITableView!
var tableViewModel: TableViewModel!
override func viewDidLoad(){
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
tableView.rowHeight = UITableView.automaticDimension
tableView.sectionHeaderHeight = UITableView.automaticDimension
tableView.sectionFooterHeight = UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableViewModel.numberOfRows(in: section)
}
func numberOfSections(in tableView: UITableView) -> Int {
return tableViewModel.numberOfSections
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: tableViewModel.cellReuseIdentifier(for: indexPath))!
return cell
}
}
class SomeSubclass: SomeVC{
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?{
//some implementation not called on xcode 10.2 on Release config.
return UILabel() //simplicity sake
}
}
场景B: 在Xcode 10.1和10.2上均可使用
class SomeVC: UIViewController, UITableViewDelegate, UITableViewDataSource{
@IBOutlet weak var tableView: UITableView!
var tableViewModel: TableViewModel!
override func viewDidLoad(){
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
tableView.rowHeight = UITableView.automaticDimension
tableView.sectionHeaderHeight = UITableView.automaticDimension
tableView.sectionFooterHeight = UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableViewModel.numberOfRows(in: section)
}
func numberOfSections(in tableView: UITableView) -> Int {
return tableViewModel.numberOfSections
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: tableViewModel.cellReuseIdentifier(for: indexPath))!
return cell
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?{
return nil
}
}
class SomeSubclass: SomeVC{
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?{
//some implementation
}
}
如果有人可以在Xcode 10.2上显示更改日志,其中详细说明了此更改,或者对Xcode 10.2错误的雷达提供帮助
已编辑:创建了一个新项目,似乎无法复制它。我会将其视为构建问题