通过参数确定子类类型,但得到错误“使用未声明的类型”。我能怎么做?

时间:2018-05-21 08:39:31

标签: ios swift

我在此行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)
    ....
}

2 个答案:

答案 0 :(得分:1)

我看到你在这里想做什么。

您正试图在导航堆栈中找到targetVC,以便您可以在targetVC之上弹出所有风险投资。

当你说if vc is targetVC时,这在英语中是有意义的。但是你在Swift方面的真正含义是检查vctargetVC是否是同一类型的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
}