我从这段代码中得到一个错误“无法推断泛型参数类型”T“。
public func userTappedView(headerFooterView: CollapsableTableViewSectionHeaderProtocol, atPoint location:CGPoint) {
if let tableView = self.collapsableTableView() {
//Error here
let value = sectionForUserSelectionInTableView(tableView, atTouchLocation: location, inView: headerFooterView)
...
}
...
}
func sectionForUserSelectionInTableView<T: UITableViewHeaderFooterView where T: CollapsableTableViewSectionHeaderProtocol>(tableView: UITableView, atTouchLocation location:CGPoint, inView view: T) -> NSNumber? {
...
}
最佳答案
我希望我理解您的问题,即确保UITableViewHeaderFooterView的子类符合CollapsableTableViewSectionHeaderProtocol协议。
如果我的假设是正确的,你可以这样做:
//// Define a protocol
protocol CollapsableTableViewSectionHeaderProtocol {
func sectionForUserSelectionInTableView(tableView: UITableView, atTouchLocation location:CGPoint, inView view: T) -> NSNumber?
}
class MyTableViewController: UITableViewController {
internal func userTappedView(headerFooterView: UITableViewHeaderFooterView, atPoint location:CGPoint) {
//// Call CollapsableTableViewSectionHeaderProtocol method
let value = headerFooterView.sectionForUserSelectionInTableView(self.tableView, atTouchLocation: location, inView: headerFooterView)
print(value)
}
}
//// Implement CollapsableTableViewSectionHeaderProtocol for UITableViewHeaderFooterView via extension
extension UITableViewHeaderFooterView: CollapsableTableViewSectionHeaderProtocol {
func sectionForUserSelectionInTableView(tableView: UITableView, atTouchLocation location:CGPoint, inView view: T) -> NSNumber? {
//....
return nil
}
}