param在自己的函数中是'out of scope'

Param is 'out of scope' in its own function

我的 UITabBarController 有一个方法可以切换到特定视图控制器类型的选项卡。该方法为此 VC 类型采用一个名为 newVC 的参数。它的类型是UIViewController.Type。该方法找到具有该类型的选项卡,并切换到它。

当 newVC 类型在方法中被硬编码时,该方法工作正常。但是当我把它作为一个变量时,XCode 抱怨新的VC 参数在方法中不可用。

看在上帝的份上,为什么?

func animateToVC(_ newVC: UIViewController.Type){
      guard let VCs = viewControllers else { return }

      for (listIndex, vc) in VCs.enumerated(){
         guard let navController = vc as? CustomNavBarController,
               navController.rootViewController is newVC else { continue } --> "Cannot find type 'newVC' in scope"

         animateToView(atTabIndex: listIndex)
         selectedIndex = listIndex
      }
   }

您不能在 Swift 中使用带有 is 关键字的变量进行类型检查。但是,您可以使该方法泛型化并改用泛型类型参数。

func animateToVC<ViewControllerType: UIViewController>(_ newVC: ViewControllerType.Type) {
    guard let VCs = viewControllers else { return }

    for (listIndex, vc) in VCs.enumerated(){
        guard let navController = vc as? CustomNavBarController,
              navController.rootViewController is ViewControllerType else { continue }

        animateToView(atTabIndex: listIndex)
        selectedIndex = listIndex
    }
}