我正在尝试使用可选链接和两个问号但我无法理解一件事。我有这部分代码:
if let delegate = self.delegate {
delegate.webViewControllerDidCancel()
}
else {
self.navigationController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
}
哪个好。完全符合我的要求。如果有人符合协议,请致电webViewControllerDidCancel
,否则只需dismissViewController
。
然而,我尝试用这种方式做同样的事情
self.delegate?.webViewControllerDidCancel() ?? self.navigationController?.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
这似乎对我来说是合法的,也有效,但XCode给了我一个黄色的惊叹号说
调用'??'的结果未使用
我无法弄明白。这是 ??甚至应该这样工作?
答案 0 :(得分:3)
在我看来??
运算符设计用于在使用选项时设置变量,虽然它似乎可以作为控制触发哪个函数的机制 - 这不是它的直接用途。来自documentation:
nil coalescing运算符是下面代码的简写:
a != nil ? a! : b
nil coalescing运算符提供了一种更简洁的方式来以简洁易读的形式封装这种条件检查和解包。
文档中的所有示例也都是变量相关的,因此虽然操作员的功能确实适合您的使用案例 - 但Xcode的警告与您不使用操作符有关,因为它是可以假设的用途。