我在此行if vc is targetVC
“使用未声明类型'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
}
我已经声明类像MovieController继承形式UIViewController
,我希望将MovieController作为参数传递给此方法。
我想这样用:
class MovieController: UIViewController {
....
....
let _ = someModel.popToTargetController(MovieController)
....
}
答案 0 :(得分:1)
我想我看到你在这里想做什么。
您正试图在导航堆栈中找到targetVC
,以便您可以在targetVC
之上弹出所有风险投资。
当你说if vc is targetVC
时,这在英语中是有意义的。但是你在Swift方面的真正含义是检查vc
和targetVC
是否是同一类型的VC。
要解决此问题,您需要引入一个通用类型:
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)
答案 1 :(得分:0)
更新评论的答案:
targetVC不是一种类型。只是你的论点名称。
func popToTargetController(_ targetVC: MovieController) -> Bool {
guard let currentNv = tabBar?.selectedViewController as?
UINavigationController else {
return false
}
for vc in currentNv.viewControllers {
if vc is MovieController {
currentNv.popToViewController(vc, animated: false)
return true
}
}
return false
}