Swift:当委托人 class 不是直接子代时,分配委托人 class?

Swift: Assign delegate class when delegator class isn't a direct child?

我正在制作一个使用一组向下钻取表的应用程序,每个表都有自己的 TableViewController,所以我的情节提要设置了一个 MainViewController,它有一个 TableViewController (MainTable) 的转场,它有一个转场到另一个 TableViewController(子表)。我创建了一个协议,现在我正在尝试将 SubTable 指定为委托人,将 MainTable 指定为委托人。我发现的所有解决方案仅在直接从委托 class 调用(或转至)委托时才有效,在这种情况下,您可以在 prepareForSegue 方法中使用 SubTable.delegate = self,但事实并非如此如果从委托 class (MainView) 中调用(创建)子表,则无法正常工作。对不起,如果这令人困惑,我很乐意澄清其中的任何一个。这是我想要的示例:

class MainViewController: UIViewController, delegate {
    override func viewDidLoad() {        
        super.viewDidLoad()
        SubTable.delegate = self //Doesn't work
    }

    func acceptData(data: String!) {
        print(data)
    }
}

SubTable.delegate = self 行不起作用,因为尚未创建 SubTable,但如果我事先使用 let instance = SubTable() 之类的东西创建它,然后 instance.delegate = self 然后它仍然无法正常工作,因为从 MainTable 到 SubTable 的 segue 创建了一个新的、单独的 SubTable 实例。

protocol delegate {
    func acceptData(data: String!)
}

class MainTable: UITableViewController { 

}

class SubTable: UITableViewController {
    var delegate: delegate?

    func sendData() {
      self.delegate?.acceptData(data: "some text")
    }
}

您可以将委托传递给 MainTable,并在创建 SubTable 时将其分配到那里。在您的 MainTable 中创建一个字段来存储它

var subTableDelegate : delegate?

在 MainViewController 中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! MainTable
    destinationVC.subTableDelegte = self
}

在主表中:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let destinationVC = segue.destination as! SubTable
    destinationVC.delegate = self.subTableDelegate
}