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协议方法这种保留周期非常奇怪。单元格是表视图的一部分,而不是相反。获取表视图引用的视图层次结构数学更为奇怪。