我需要比较两个视图是否相同,我得到的视图如下
let viewController = navController.viewControllers[navController.viewControllers.count - 2]
let newController = self.storyboard!.instantiateViewController(withIdentifier: "Reservar")
当我打印变量值时
<Resto.ReservaViewController: 0x7fc9f0e4a860>
<Resto.ReservaViewController: 0x7fc9f0d074a0>
它们是相同的ViewController,但是结尾的数字不同,所以我认为这就是if(ViewController==newController)为false的原因
最佳答案
使用您的代码:
let viewController = navController.viewControllers[navController.viewControllers.count - 2]
let newController = self.storyboard!.instantiateViewController(withIdentifier: "Reservar")
可以完全确定这两个视图控制器不是同一个对象。它们可能是或可能不是同一类型的视图控制器(同一个类),但是函数
instantiateViewController()
总是在这个时刻之前创建一个全新的、从未存在过的视图控制器的唯一实例。它可能是与另一个实例相同的孪生兄弟,具有所有相同的设置,但它仍然是一个唯一的对象。告诉我们你想做什么。您是否正在查看导航控制器中的对象是否为您期望的类型?
然后你可以使用这样的代码:
let viewController = navController.viewControllers[navController.viewControllers.count - 2]
if viewController is ReservaViewController {
//code to operate on that type
} else {
//Code for other types of view controller
}
或者
if let viewController = navController.viewControllers[navController.viewControllers.count - 2] as? ReservaViewController {
//Code to operate on a ReservaViewController
} else {
//Code to deal with a view controller that's NOT a ReservaViewController
}
编辑:
表达式
navController.viewControllers[navController.viewControllers.count - 2]
在没有范围检查的情况下是危险的。如果导航控制器仅包含一个视图控制器,则它将崩溃,并出现索引超出范围错误。