在Xcode 10.2中未在子类上调用Protocol中的可选func

时间:2019-05-20 07:52:53

标签: ios swift xcode

如果要在子类中提供实现,是否需要为可选函数创建默认实现?

还是我做错了?还是应该归咎于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错误的雷达提供帮助

已编辑:创建了一个新项目,似乎无法复制它。我会将其视为构建问题

0 个答案:

没有答案