如何理解这行 Swift 弹出到根视图控制器的代码?

How to understand this line of Swift code to pop to root view controller?

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

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

[navigationViewController .popToRootViewController(animated: true)]

我通过查看这个答案了解了这里: 他的语法略有不同,我猜这是 2012 年以来的旧语法,所以我不得不稍微更改它,但它适用于我上面的代码。

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

这段代码对我来说似乎运行正常,但是我在互联网上找到了无数版本的语法和返回根视图控制器的方法,我不知道我在做什么是否正确或者它是如何工作的。我只知道 "it's working right now"。请帮助我理解这段代码。

其实就是一个数组...

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

这样做也是一样的。

如果你这样做:

let x = navigationViewController.popToRootViewController(animated: true)

x 将包含类型为 [UIViewController]?

UIViewController 的可选数组

如果你这样做:

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

x 将包含一个 [[UIViewController]?]

类型的可选数组 UIViewController

如果你这样做:

[navigationViewController.popToRootViewController(animated: true)]

永远不会使用array的array...

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

myObject
    .myMethod()

常用于语法流畅...

编辑:

此方法的 Objective-C 调用为:

[navigationViewController popToRootViewControllerAnimated: YES];

UINavigationController class 内部有一个名为 popToRootViewController 的方法 它采用名为 animated 的 bool 参数。如果您将动画值作为 true 传递,导航将通过动画进行。

所以要调用objective c中的方法

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

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

上面同样的东西可以写成swift为

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

rootNavController.popToRootViewController(animated: true)

类似于OBjc中的场景 以上写法在swift中。 我们得到 navController 的实例,我们调用 popToRootViewController 方法()