为什么不使用Swift在Swift中使用委托来设置属性值

时间:2019-01-04 02:28:26

标签: ios swift

我尝试注销时使用委托重置我的ViewControllerA(主页)属性“类型”值。
但是我设置了断点,并且我的委托函数成功了。
当我再次登录时,在ViewWillAppear中打印我的属性“类型”。在注销之前,它还会缓存旧值。
请告诉我我怎么了。
谢谢。

class ViewControllerA: UIViewController, CustomDelegate {

    enum Type: Int {
    case book = 0 
    case pen      
    }

    var tmpType: Type?

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        printBBLog("tmpType: \(tmpType)") //before I logout the value is "pen",and I login again the value is "pen". 
    }

    func clearType() {
        printBBLog("clear")
        self.tmpType = nil
        printBBLog("\(self.tmpType)") 
    }

    @objc func bookBtnClicked(sender: UIButton) {
        self.tmpType = .book
    }

    @objc func penBtnClicked(sender: UIButton) {
        self.tmpType = .pen
    }
}


class ViewControllerB: UIViewController {

    var delegate: CustomDelegate?

    func doLogout() {
        let vc = ViewControllerA()
        self.delegate = vc
        self.delegate?.clearType()
    }

}

1 个答案:

答案 0 :(得分:0)

您正在创建ViewControllerA的新实例。由于您正在使用UITabBarController,因此可以从ViewControllerA访问ViewControllerB并分配代表。之后,您将获得想要的结果。供参考,请检查以下代码。

class ViewControllerB: UIViewController {

    var delegate: CustomDelegate?

    func doLogout() {
        let viewControllers = self.tabBarController?.viewControllers
        if let vc1 = viewControllers[0] as? ViewControllerA {
        self.delegate = vc1
        self.delegate?.clearType()
      }
    }

}

如果在UITabBarcontroller内使用UINavigationController,则使用:

if let vc1 = ((self.tabBarController?.viewControllers?[0] as? UINavigationController)?.viewControllers[0] as? ViewControllerA)