为什么要编译这样的代码?在iOS UIViewController中调用popToRootViewControllerAnimated吗?

时间:2019-05-24 02:03:25

标签: ios objective-c

我对iOS开发有疑问。为什么可以编译?

__kindof UIViewController *selectedViewController;
[selectedViewController popToRootViewControllerAnimated:YES];

3 个答案:

答案 0 :(得分:2)

使用__kindof意味着编译器可以假定selectedViewController的类型为UIViewController或层次结构中具有UIViewController的任何子类

popToRootViewControllerUINavigationController的一种方法。由于UINavigationControllerUIViewController的子类,因此编译器会说:

  

好的,我假设您知道自己在做什么,然后让您调用一个我知道来自UIViewController子类的方法。

这类似于使用演员表:

UIViewController *selectedViewController;
[(UINavigationController *)selectedViewController popToRootViewControllerAnimated:YES];

您正在告诉编译器信任您。

但是,当然,在两种情况下,如果在运行时变量实际上不是UINavigationController,则代码将在运行时崩溃。

答案 1 :(得分:0)

UINavigationController不能弹出UIViewController控制器。

答案 2 :(得分:-1)

UINavigationController具有rootViewController属性,它可以具有多个视图控制器,因此您可以使用popToRootViewController到达第一个视图控制器。您可以将以下代码用于快速版本。

    viewController.navigationController?.popToRootViewController(animated: true)