2017-04-27 37 views
0

我想觀察全局屬性selectedTagID並在rootViewController上運行一個方法。這可能嗎?我將如何獲得對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

是的,你可以做到這一點如果您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() 
} 
+1

thx我不得不這樣做,因爲! AppDelegate「,但工作! – timpone

相關問題