我需要比较两个视图是否相同,我得到的视图如下

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]在没有范围检查的情况下是危险的。如果导航控制器仅包含一个视图控制器,则它将崩溃,并出现索引超出范围错误。

07-26 09:39