比较两个Swift视图控制器

5

我需要比较两个视图是否相同,我获取这些视图的方式如下:

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个回答

9
您想比较两个视图控制器的Type吗?
print(type(of: viewController) == type(of: newController))

7

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

类和对象也是如此。

假设您的视图控制器是ViewController类的一个实例。那么你想知道的是viewController is ViewController是否成立。就像问“这是一把椅子吗?”


6

使用您的代码:

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]这个表达式如果没有进行范围检查会很危险。如果导航控制器中只包含一个视图控制器,它将因索引越界而崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接