如何比较Swift 3中的UIViewController?
我想比较的UIViewController在斯威夫特3,但有一些错误如何比较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
}
}
/Users/varunnaharia/Documents/Projects/appname/appname/Public/UINavigationController+Extra.swift:18:30 :无法将类型的价值 '的UIViewController' 预期参数类型 'AnyClass'(又名 'AnyObject.Type')
,如果尝试使用
if(vc is viewController)
它给
/Users/varunnaharia/Documents/Projects/appname/appname/Public/UINavigationController+Extra.swift:18:22:使用未声明的类型 '的viewController'
我通过它调用它
self.navigationController?.popOrPopToViewController(viewController: MyUIViewController(), animated: false)
如果你想比较一个特定的视图控制器,你必须比较他们的引用。
尝试......
if(vc === viewController))
{
return (self.navigationController?.popToViewController(vc, animated: animated)?.last)!
}
for viewsController in arrViewControllers
{
if(viewsController.isKind(of: YourControllerClassName.self)){
}
}
完全相同的错误'Users/varunnaharia/Documents/Projects/appname/appname/Public/UINavigationController + Extra.swift:18:30:无法将类型'UIViewController'的值转换为期望的参数类型'AnyClass'(又名'AnyObject.Type ')' –
您是否使用过我提供的确切代码? –
你在哪里得到错误? –
在迅速的,我们用is
,而不是isKind(of:)
。
is
用于检查type of the object
。
所以,你可以使用,
if(vc is UIViewController)
但我觉得在这里你试图match the 2 references of UIViewController
。
因此,您需要使用===
而不是is
。该运算符用于匹配相同类型的2个引用。
if(vc === viewController)
感谢您的解释 –
你正在寻找可能是什么,是,直到弹出一个给定的控制器,在给定的控制器是当前导航堆栈中的对象的方法。
所以,
这里是弹出一个给定的控制器上面所有控制器的扩展方法。
extension UINavigationController {
func popTo(controllerToPop:UIViewController) {
let controllers = self.viewControllers
for controller in controllers {
if(controller == controllerToPop) {
self.popTo(controllerToPop: controllerToPop)
}
}
}
}
我只是修改先生@BangOperator的移动到特定的视图控制器的答案。
extension UINavigationController {
func popTo(controllerToPop:UIViewController) {
//1. get all View Controllers from Navigation Controller
let controllersArray = self.viewControllers
//2. check whether that view controller is exist in the Navigation Controller
let objContain: Bool = controllersArray.contains(where: { $0 == controllerToPop })
//3. if true then move to that particular controller
if objContain {
self.popToViewController(controllerToPop, animated: true)
}
}
}
斯威夫特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))
}
}
}
}
工作,如果是VC arrViewControllers {}试试这个 –
请解释它是如何工作的?它是给出相同的错误... –
尝试'如果(vc是UIViewController)' –