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
}
}
我的 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
}
}