Ios 通过参数确定子类类型,但得到错误“;使用未声明的类型";。我该怎么办?

Ios 通过参数确定子类类型,但得到错误“;使用未声明的类型";。我该怎么办?,ios,swift,Ios,Swift,如果vc是targetVC,我在这一行得到以下错误 “使用未声明的类型‘targetVC’” 我已经声明了类,比如MovieController继承表单UIViewController,我想将MovieController作为参数传递给这个方法 我想这样使用: class MovieController: UIViewController { .... .... let _ = someModel.popToTargetController(MovieController

如果vc是targetVC,我在这一行得到以下错误

“使用未声明的类型‘targetVC’”

我已经声明了类,比如MovieController继承表单
UIViewController
,我想将MovieController作为参数传递给这个方法

我想这样使用:

class MovieController: UIViewController {
    ....
    ....
    let _ = someModel.popToTargetController(MovieController)
    ....
}
popToTargetController(MovieController.self)

根据评论更新答案:

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
}
我想我明白你在这里想做什么了

您正试图在导航堆栈中找到
targetVC
,以便可以将所有VCs弹出到
targetVC
的顶部

当你说
如果vc是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
}

targetVC
a
class
是您声明的吗?很肯定情况并非如此。您必须在
is
之后放置一个类。或者如果vc==targetVC
,你真的想写
?@luk2302谢谢你的帮助。我已经声明了类似MovieController的类继承UIViewController表单,我希望将MovieController作为参数传递给此方法。ps:我的英语一般…谢谢,我已经声明了类像MovieController继承形式UIViewController,我想把MovieController作为参数传递给这个方法,所以我不能使用UIViewController Direct对不起,我的英语一般,我没有说清楚,我想像泛型类型一样“targetVC”,因为我喜欢MovieController,MovieController2,MovieController3…,它们都是从UIViewController2继承的,非常感谢!!你对我的问题理解正确,我试过了,你的答案是正确的。我的英语一般,只能读,不能写。。。
popToTargetController(MovieController.self)