-3

我想编写一些代码从当前视图控制器弹出回根视图控制器。令人困惑的是,我找到了很多关于这个的答案,有各种各样的语法。(我猜测 Objective C 或不同版本的 Swift 中的旧答案......)这是目前在我的 AppDelegate 中为我工作的最简单的语法:

let navigationViewController = self.window?.rootViewController as! UINavigationController

[navigationViewController .popToRootViewController(animated: true)]

我通过查看这个答案得到了这么多:https ://stackoverflow.com/a/23027260/8887398 他的语法略有不同,我猜这是从 2012 年开始的旧语法,所以我不得不稍微改变它,但它是使用我上面的代码。

问题:我真的不明白代码的第二行发生了什么。当然,我知道它会弹回根视图控制器,但我根本不理解语法。最令人困惑的是代码被一对我完全不理解的 [ ] 括号包围。接下来,popToViewController 以点“.”开头,这与我链接的答案不同。我习惯使用“。” 访问对象的属性,但这里它只是单独使用,左侧没有任何东西。

这段代码似乎对我来说运行正常,但是我在互联网上找到了无数版本的语法和弹回根视图控制器的方法,我不知道我所做的是否正确或它是如何工作的全部。我所知道的是“它现在正在工作”。请帮助我理解这段代码。

4

2 回答 2

1

UINavigationController 类有一个名为 popToRootViewController 的方法,它接受一个名为动画的布尔参数。如果您将动画值作为 true 传递,则导航将与动画一起发生。

所以调用目标c中的方法

UINavigationController *navigationController = (UINavigationController  *)self.window.rootViewController;
[navigationController popToRootViewControllerAnimated:YES];

上面第一次我们得到了一个指向navigationController的指针。使用它,我们在 UINavigationController 类中调用 popToRootViewControllerAnimated 方法,参数值为 YES(在 Objc 中,YES 表示 true,NO 表示 false)

上面相同的东西可以用 swift 写成

let rootNavController = self.window?.rootViewController as! UINavigationController

rootNavController.popToRootViewController(animated: true)

与 OBjc 中的 Scenario 类似,上述编写的语法是 swift 的。我们得到 navController 的实例,我们调用 popToRootViewController 方法()

于 2019-02-25T10:04:05.727 回答
0

事实上,它只是一个数组......

你可以写:navigationViewController.popToRootViewController(animated: true)

那也会做同样的事情。

如果你这样做:

let x = navigationViewController.popToRootViewController(animated: true)

x将包含一个可选UIViewController的类型数组[UIViewController]?

如果你这样做:

let x = [navigationViewController.popToRootViewController(animated: true)]

xUIViewController将包含一个类型为可选数组的数组[[UIViewController]?]

如果你这样做:

[navigationViewController.popToRootViewController(animated: true)]

永远不会使用数组的数组...

并且空格在 Swift 中被简单地忽略了,例如你可以这样做:

myObject
    .myMethod()

它通常用于流畅的语法...

编辑

此方法的 Objective-C 调用将是:

[navigationViewController popToRootViewControllerAnimated: YES];
于 2019-02-25T09:57:01.373 回答