是否可以在rootViewController上调用方法?

时间:2017-04-27 03:37:33

标签: ios swift

我想观察全局属性selectedTagIDs并在rootViewController上运行一个方法。这可能吗?我如何获得对rootViewController的引用?

import UIKit

class Global {
  static var sharedInstance = Global()
  var tags = [Tag]()
  var selectedTagIDs = [Int]() {
    didSet {
      // get error `use of unresolved identifier appDelegate`
      let viewController = appDelegate.window!.rootViewController as! MainViewController
      viewController.filterItems()
    }
  }
}

1 个答案:

答案 0 :(得分:1)

是的,您可以执行此操作如果您的rootViewController类似于您可以响应该方法调用的类型。有条件地检查rootViewController as? MainViewController

您收到该错误的原因是您尚未定义代码中的appDelegate。要解决此问题,我们可以使用可选链接来展开UIApplication单例的委托,并将其指定为appDelegate的值。从那里我们可以得到窗口,因此rootViewController。当我们打开viewController时,我们会有条件地检查它是否为MainViewController类型,如果是,请将其告诉filterItems()

if let appDelegate = UIApplication.shared.delegate as? AppDelegate, let viewController = appDelegate.window!.rootViewController as? MainViewController {
    viewController.filterItems()
}