我在这一行的误差小于cc>
“使用未声明的类型'targetVC'”
func popToTargetController(_ targetVC: UIViewController) -> Bool {
guard let currentNv = tabBar?.selectedViewController as? UINavigationController else{
return false
}
for vc in currentNv.viewControllers {
if vc is targetVC {
currentNv.popToViewController(vc, animated: false)
return true
}
}
return false
}
我已经声明了类like MovieController inherit form
if vc is targetVC
,并且希望将MovieController作为参数传递给此方法。我想这样使用:
class MovieController: UIViewController {
....
....
let _ = someModel.popToTargetController(MovieController)
....
}
最佳答案
我想我明白你想在这里做什么了。
您正试图在导航堆栈中找到targetVC
,以便可以将所有VCs弹出到targetVC
的顶部。
当你说if vc is targetVC
时,这在英语中是有意义的。但你真正想说的Swift,是检查vc
和targetVC
是同一类型的风险投资。
要解决此问题,需要引入泛型类型:
func popToTargetController<T: UIViewController>(_ targetVCType: T.Type) -> Bool {
guard let currentNv = tabBar?.selectedViewController as? UINavigationController else{
return false
}
for vc in currentNv.viewControllers {
if vc is T {
currentNv.popToViewController(vc, animated: false)
return true
}
}
return false
}
然后像这样传递您的
MovieController
:popToTargetController(MovieController.self)