我在这一行的误差小于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 formif vc is targetVC,并且希望将MovieController作为参数传递给此方法。
我想这样使用:
class MovieController: UIViewController {
    ....
    ....
    let _ = someModel.popToTargetController(MovieController)
    ....
}

最佳答案

我想我明白你想在这里做什么了。
您正试图在导航堆栈中找到targetVC,以便可以将所有VCs弹出到targetVC的顶部。
当你说if vc is targetVC时,这在英语中是有意义的。但你真正想说的Swift,是检查vctargetVC是同一类型的风险投资。
要解决此问题,需要引入泛型类型:

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)

10-07 18:16