Ios UITABLEVIEWCELL的扩展未在swift中工作

Ios UITABLEVIEWCELL的扩展未在swift中工作,ios,swift,uitableview,swift-extensions,Ios,Swift,Uitableview,Swift Extensions,我创建了扩展: public extension UITableViewCell { /// Generated cell identifier derived from class name static func cellIdentifier() -> String { return String(describing: self) } var indexPath:IndexPath

我创建了扩展:

 public extension UITableViewCell {
        /// Generated cell identifier derived from class name
        static func cellIdentifier() -> String {
            return String(describing: self)
        }
      
        var indexPath:IndexPath?{
               return tableView?.indexPath(for: self)
        }
      
        var tableView: UITableView? {
               var view = superview
               while let v = view, v.isKind(of: UITableView.self) == false {
                   view = v.superview
               }
               return view as? UITableView
        }
    }
我正在尝试在uitableviewcell类中使用扩展:

func setup(viewModel: ViewModelClass) {       
        if indexPath != nil {
            print("indexpath") 
        }else {
            print("nil")  // But it always gives nill.
        }
}

我想在uitableviewcell中获取索引的节和行。

看看这个扩展。我在项目中使用它来获取UITableViewCell子类中的indexPath和tableView,它工作得非常好

private extension UIResponder {
    func next<T: UIResponder>(_ type: T.Type) -> T? {
        return next as? T ?? next?.next(type)
    }
}

extension UITableViewCell {

    var tableView: UITableView? {
        return next(UITableView.self)
    }

    var indexPath: IndexPath? {
        return tableView?.indexPath(for: self)
    }
}
专用扩展UIResponder{
func next(类型:T.type)->T{
将next返回为?T??next?。next(类型)
}
}
扩展UITableViewCell{
var tableView:UITableView{
返回下一个(UITableView.self)
}
var indexPath:indexPath{
return tableView?.indexPath(for:self)
}
}

如何调用
设置(viewModel:
?该单元格很可能还不是
UITableView
的一部分。顺便说一下,您可能应该使用
is
而不是
isKind(of:)
。setup()从cellForRowAt IndExpath调用的is协议方法这种保留周期非常奇怪。单元格是表视图的一部分,而不是相反。获取表视图引用的视图层次结构数学更为奇怪。