【发布时间】:2014-09-22 18:15:09
【问题描述】:
我正在学习 Swift,作为这个过程的一部分,我试图弄清楚这里到底发生了什么。我有一个自定义 segue,我想在其中放置我的模态视图控制器解除转换。过去在 Objective-c 中是这样的:
UIViewController *sourceViewController = self.sourceViewController;
[sourceViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
self 是UIStoryboardSegue 的一个实例。
我在 Swift 中将这个 sn-p 翻译为:
self.sourceViewController.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
从编译器得到这个错误:
'UIViewController?'没有名为的成员 'dismissViewControllerAnimated'
现在,by documentation,presentingViewController 方法如下所示:
var presentingViewController: UIViewController? { get }
根据我对 Swift 语言文档的理解,? 应该打开该值(如果有)。在这种情况下,视图控制器。无法解释的事实是:如果我放一个双问号,它会编译并且可以工作:
self.sourceViewController.presentingViewController??.dismissViewControllerAnimated(true, completion: nil)
谁能告诉我我错过了什么?那该怎么办?
【问题讨论】:
-
等待 -1 的原因。我知道这可能是一个 n00b 问题(正如我所说:我正在学习),但我认为我将其表述得很清楚,这不是一个具体案例,也不是我能找到的任何记录。
-
sourceViewController的声明是什么? -
@GabrielePetronella 我更新了这个问题。它是 UIStoryboardSegue 的属性。
标签: ios uiviewcontroller swift