你如何对 optional 的 optional 执行可选绑定?
Posted
技术标签:
【中文标题】你如何对 optional 的 optional 执行可选绑定?【英文标题】:How do you perform optional binding on an optional of optional? 【发布时间】:2015-08-06 11:59:19 【问题描述】:如何对 optional 的 optional 进行可选绑定?
例如,假设 UIViewController 的 navigationController 属性是可选的。我应该使用方法#1还是方法#2,还是有第三种方法?
方法#1
if let navigationController = viewController.navigationController!
或
方法#2
if let optionalNavigationController = viewController.navigationController
let navigationController = optionalNavigationController
【问题讨论】:
相关:How to unwrap Optional<Optional<T>> in Swift 1.2. 【参考方案1】:还有一个解决办法:
if let stillOptional = viewController.navigationController, let notOptional = stillOptional
//use notOptional here
【讨论】:
我列出的方法 #1 似乎更干净,因为它只有一个级别? @Boon 它更干净,但如果navigationController
是nil
,它会因为强制展开而崩溃。【参考方案2】:
if let navigationController = viewController?.navigationController
【讨论】:
为什么在 viewController 上是可选的? Optional chaining ViewController 在这种情况下不是可选的,为什么要链接它? 哦,对不起。我很困惑。【参考方案3】:更多的函数式编程解决方案:
if let a = optionalOfOptional?.map($0)
println(a)
【讨论】:
【参考方案4】:如果您知道视图控制器有一个导航控制器,因为您在 Interface Builder 中设计了它或以编程方式创建了它,请声明一个变量
var navigationController : UINavigationController!
并将viewDidLoad()
中的导航控制器分配为隐式展开可选
navigationController = viewController!.navigationController!
如果您不知道,请使用其他答案中描述的普通可选绑定
【讨论】:
以上是关于你如何对 optional 的 optional 执行可选绑定?的主要内容,如果未能解决你的问题,请参考以下文章