如何在委托中的UITableView中检查当前控制器

时间:2018-07-30 07:23:04

标签: ios swift uitableview

我正在尝试学习一些Swift lang,我想知道如何将以下Objective-C转换为Swift:

- (void)refreshDataOnChange {
    if (![tblSkillMaterials.delegate isKindOfClass:[self class]]) {
        tblSkillMaterials.delegate = self;
    }
    if (![tblSkillMaterials.dataSource isKindOfClass:[self class]]) {
        tblSkillMaterials.dataSource = self;
    }
    //Other Code Logic Here

}

更具体地说,我需要知道如何在新语法中使用isKindOfClass。

func refreshDataOnChange() {
    if tblSkillMaterials.delegate?.isKind(of: ?) {
        tblSkillMaterials.delegate = self
    }
    if tblSkillMaterials.dataSource?.isKind(of: ?) {
        tblSkillMaterials.dataSource = self
    }
    //Other Code Logic Here
}

获取错误,例如:

  

无法将“ ViewController”类型的值转换为预期参数   键入“ AnyClass”(又名“ AnyObject.Type”)

4 个答案:

答案 0 :(得分:1)

尝试以下代码,对我来说效果很好:

func refreshDataOnChange() {
   if tblSkillMaterials.delegate?.isKind(of: <your view controller name>.self) {
     tblSkillMaterials.delegate = self
   }
   if tblSkillMaterials.dataSource?.isKind(of: <your view controller name>.self) {
     tblSkillMaterials.dataSource = self
   }
   //Other Code Logic Here
 }

答案 1 :(得分:0)

尝试以下代码,我认为它可以正常工作:

if !tableView.dataSource?.isKind(of: self) {
    self.tableView.dataSource = self
}

if !tableView.delegate?.isKind(of: self) {
    self.tableView.delegate = self
}

答案 2 :(得分:0)

不确定这是否是一种好方法,但可能会对您有所帮助。

func checkDelegate()
{

    if tblVIew.delegate != nil
    {
        if (tblVIew.delegate?.isEqual(self))!
        {
            print("self is  the delegate")
        }
        else{
            print(" else case")
        }
    }
    else{
         print(" delegate is nil")
    }

}

答案 3 :(得分:0)

只需使用这两行而不是上面的行

self.tblSkillMaterials.delegate = self
self.tblSkillMaterials.dataSource = self