我从这段代码中得到一个错误“无法推断泛型参数类型”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
    }
}

10-08 01:03