比较两个viewControllers swift

Alf*_*lle 0 iphone viewcontroller swift

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

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

当我打印变量的值时,我得到了这个

<Resto.ReservaViewController: 0x7fc9f0e4a860>
<Resto.ReservaViewController: 0x7fc9f0d074a0>
Run Code Online (Sandbox Code Playgroud)

它们是相同的ViewController,但最后的数字是不同的,所以我认为这就是if(viewController == newController)为假的原因

uki*_*kim 6

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

print(type(of: viewController) == type(of: newController))
Run Code Online (Sandbox Code Playgroud)


Dun*_*n C 6

使用您的代码:

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

您可以完全确定这两个视图控制器不是同一个对象。它们可能是也可能不是相同类型的视图控制器(同一个类),但该函数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
}
Run Code Online (Sandbox Code Playgroud)

或者

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
}
Run Code Online (Sandbox Code Playgroud)

编辑:

navController.viewControllers[navController.viewControllers.count - 2]没有范围检查的表达式是危险的。如果导航控制器只包含 1 个视图控制器,它将因索引超出范围错误而崩溃。


mat*_*att 5

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

类和对象也是一样的.

假设您的视图控制器是ViewController类的一个实例.那么你想知道的是,是否viewController is ViewController.就像问"这是椅子吗?"