如何比较Swift 3中的UIViewController?

Var*_*ria 4 uiviewcontroller uinavigationcontroller ios swift swift3

我想在Swift 3中与UIViewController进行比较,但是有一些错误

extension UINavigationController
{
    func myPopToViewController(viewController:UIViewController, animated:Bool) -> UIViewController? {
        var arrViewControllers:[UIViewController] = []

        arrViewControllers = self.viewControllers
        for vc:UIViewController in arrViewControllers {
            if(vc.isKind(of: viewController) ) // This Line gives me error
            {
                return (self.navigationController?.popToViewController(vc, animated: animated)?.last)!
            }

        }
        return nil
    }

}
Run Code Online (Sandbox Code Playgroud)

/Users/varunnaharia/Documents/Projects/appname/appname/Public/UINavigationController+Extra.swift:18:30:无法将'UIViewController'类型的值转换为预期的参数类型'AnyClass'(又名'AnyObject.Type')

如果尝试使用

if(vc is viewController)
Run Code Online (Sandbox Code Playgroud)

它给

/Users/varunnaharia/Documents/Projects/appname/appname/Public/UINavigationController+Extra.swift:18:22:使用未声明的类型'viewController'

我通过这个称呼它

self.navigationController?.popOrPopToViewController(viewController: MyUIViewController(), animated: false)
Run Code Online (Sandbox Code Playgroud)

小智 12

for viewsController in arrViewControllers
{
    if(viewsController.isKind(of: YourControllerClassName.self)){
    }
}
Run Code Online (Sandbox Code Playgroud)


SAU*_*TIN 8

Swift 4 希望它对你有用

   extension UINavigationController {
  func myPopToViewController(viewController:UIViewController, animated:Bool) {
    var arrViewControllers:[UIViewController] = []
    arrViewControllers = self.viewControllers
    for vc:UIViewController in arrViewControllers {
      if(vc.isKind(of: viewController.classForCoder)){
         (self.popToViewController(vc, animated: animated))
      }
    }
  }

}
Run Code Online (Sandbox Code Playgroud)


PGD*_*Dev 5

在 swift 中,我们使用 is代替isKind(of:).

is用于检查type of the object.

所以你可以使用,

if(vc is UIViewController)
Run Code Online (Sandbox Code Playgroud)

但我认为你在这里试图 match the 2 references of UIViewController

因此,您需要使用===而不是is. 此运算符用于匹配 2 个相同类型的引用。

if(vc === viewController)
Run Code Online (Sandbox Code Playgroud)


Ado*_*lfo 1

如果您想与特定视图控制器进行比较,您必须比较它们的引用。

尝试这个...

if(vc === viewController) )
{
    return (self.navigationController?.popToViewController(vc, animated: animated)?.last)!
}
Run Code Online (Sandbox Code Playgroud)