我想观察全局属性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()
}
}
}
答案 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()
}