展开可选类型的最佳方法[重复]

Posted

技术标签:

【中文标题】展开可选类型的最佳方法[重复]【英文标题】:Best way to unwrap optional type [duplicate] 【发布时间】:2016-07-14 04:40:54 【问题描述】:

我有情况

let a: Int? = getFromSomewhere()
if a == nil 
    return

let b = a!

我不喜欢太多层。但我认为这并不优雅。 你有更优雅的方式吗?

【问题讨论】:

“优雅”到底是什么意思? — 如果a 不是 nil,你为什么要返回?如果它 nil,你为什么要强制解开a?你的代码没有意义。如果你运行该代码,你会崩溃。 我的错,应该是相等的。 【参考方案1】:

省略a,省略nil检查,省略force-unwrap;一行:

guard let b = getFromSomewhere() else return

【讨论】:

【参考方案2】:

您也可以使用guardif let 来解开选项:

所以而不是:

if a != nil 
    return

let b = a! 

if let a = getFromSomewhere()  
 // Do what you want with a
 else 
  // a is nil

并带有保护声明:

guard let a = getFromSomewhere() else 
    NSLog("error a is nil")
    return 
 

// You can use a now if it's not nil

【讨论】:

以上是关于展开可选类型的最佳方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的可选类型错误:致命错误:在展开可选值时意外发现 nil

可选类型“字符串”的值未展开;你的意思是用'!或者 '?' [复制]

Swift 风格:函数返回您需要的类型的可选类型以便继续,处理此问题的最佳实践是啥?

在展开可选值 uint32 swift 时意外发现 nil

将枚举类型作为可选参数传递[重复]

展开可选 JSON 元素会使应用程序崩溃 [重复]