比较两个视图控制器 swift

Compare two viewControllers swift

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

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

要比较两个视图控制器的 Type 吗?

print(type(of: viewController) == type(of: newController))

两把椅子都是椅子,但它们仍然不是同一把椅子。

classes 和对象是一样的。

假设您的视图控制器是 ViewController class 的一个实例。那么你想知道的是是否viewController is ViewController。就像问 "is this a chair?"

使用您的代码:

let viewController = navController.viewControllers[navController.viewControllers.count - 2]
let newController = self.storyboard!.instantiateViewController(withIdentifier: "Reservar")

你可以完全确定这两个视图控制器不是同一个对象。它们可能是也可能不是同一类型的视图控制器(相同 class),但是函数 instantiateViewController() always 创建了一个全新的、从未存在过的-在此之前,视图控制器的唯一实例。它可能是另一个实例的同卵双胞胎,具有相同的设置,但它仍然是一个独特的对象。

告诉我们更多关于你想做什么的信息。您是否正在查看来自导航控制器的对象是否是您期望的类型?

然后你可以使用这样的代码:

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 个视图控制器,它将崩溃并出现索引超出范围错误。