比较两个视图控制器 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 个视图控制器,它将崩溃并出现索引超出范围错误。
我需要比较两个视图是否相同,我得到的视图是这样的
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 个视图控制器,它将崩溃并出现索引超出范围错误。