比较两个viewController swift

时间:2018-08-07 23:25:47

标签: iphone swift viewcontroller

如果两个视图相同,我需要进行比较,我得到的是这样的视图

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

的原因

3 个答案:

答案 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))