【问题标题】:Compare two viewControllers swift快速比较两个 viewController
【发布时间】:2018-08-07 23:25:46
【问题描述】:

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

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 的原因

【问题讨论】:

    标签: iphone swift viewcontroller


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用您的代码:

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

      您可以完全确定这两个视图控制器不是同一个对象。它们可能是也可能不是同一类型的视图控制器(同一类),但函数 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 个视图控制器,则会因索引超出范围错误而崩溃。

      【讨论】:

        【解决方案3】:

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

        类和对象也是如此。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-19
          • 1970-01-01
          • 2021-02-07
          • 2011-10-02
          • 2019-05-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多