首页 > 解决方案 > 我的委托方法不应该变成 nil 吗?

问题描述

得到了 2 个 ViewControllers 第一个是 ViewController 第二个 TableViewCotnroller

    class ViewController: UIViewController, CLLocationManagerDelegate, TabVCDelegate {

        func reciveData(_ numberOfRows: Int) {
            print(numberOfRows)
        }
...
    }

表视图控制器:

protocol TabVCDelegate {
    func reciveData(_ numberOfRows: Int)
}

class TabVC: UITableViewController {

    var delegate: TabVCDelegate?

    @IBAction func passDataBack(_ sender: UIButton) {
        delegate?.reciveData(5)
        self.dismiss(animated: true, completion: nil)
        print(delegate ?? "show me if its nil")
    }

我的委托?.reciveData(5) 出于某种原因 nil 无法弄清楚当我有 2 个普通 ViewController 时它确实有效我错过了关于 TableViewControllers 的一些东西吗?或者也许是别的东西?任何帮助,将不胜感激。

标签: swiftdelegates

解决方案


首先:
使该delegate属性weak避免强引用循环

weak var delegate: TabVCDelegate?

为了实现这一点,您的协议应符合class

protocol TabVCDelegate: class {
    func reciveData(_ numberOfRows: Int)
}

下一步:
您必须在某处设置该委托。如果你TabVC在你的类中引用了实例,ViewController那么它看起来像这样: tabVC.delegate = self

这里是关于“如何在 Swift 中创建委托”的详细描述


推荐阅读