如果两个视图相同,我需要进行比较,我得到的是这样的视图
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
的原因答案 0 :(得分:5)
两把椅子都是椅子,但仍然不是同一把椅子。
类和对象相同。
比方说,您的视图控制器是ViewController类的实例。然后,您想知道是否为viewController is ViewController
。就像问“这是椅子吗?”
答案 1 :(得分:4)
使用您的代码:
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]
很危险。如果导航控制器仅包含1个视图控制器,它将崩溃,并出现索引超出范围错误。
答案 2 :(得分:3)
您要比较两个视图控制器的Type
吗?
print(type(of: viewController) == type(of: newController))