从 UITabBarController 调用时无法获取常用函数中的选项卡项

Unable to get tab items in a common function when called from UITabBarController

我在 UIViewController 扩展中有一个常用函数。我从标签栏控制器和视图控制器调用这个函数。这在从视图控制器调用时有效,但在从选项卡栏控制器调用时无效。控制转到 else 错误:tabItems。我不知道出了什么问题,是否有任何其他方法可以在从选项卡控制器调用时正常工作?

class MainTabBarController: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.updateBadges()
}

extension UIViewController {

    func updateBadges() {
        DispatchQueue.main.async {
            self.setBadge(tab: 1, count: 3)
        }
    }

    func setBadge(tab: Int, count: Int) {
        if let tabItems = self.tabBarController?.tabBar.items {
            print("Inside tabItems")

            let tabItem = tabItems[tab]

            if count != 0 {
                tabItem.badgeValue = String(count)
            } else {
                tabItem.badgeValue = nil
            }
        } else {
            print("Error: tabItems")
        }
    }
}

问题是 self.tabBarController 对于 UITabBarController 本身来说是 nil。一种可能的解决方案如下所示:

func setBadge(tab: Int, count: Int) {
    let tabBarController = self as? UITabBarController ?? self.tabBarController

    if let tabItems = tabBarController?.tabBar.items {
        print("Inside tabItems")

        let tabItem = tabItems[tab]

        if count != 0 {
            tabItem.badgeValue = String(count)
        } else {
            tabItem.badgeValue = nil
        }
    } else {
        print("Error: tabItems")
    }
}