首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift 1.2中解包Optional<Optional<T>>

如何在Swift 1.2中解包Optional<Optional<T>>
EN

Stack Overflow用户
提问于 2015-02-26 00:56:27
回答 3查看 307关注 0票数 3

假设我们有String??值。OptionalOptional可能有3种状态:

代码语言:javascript
复制
let strOptOpt1: String?? = .Some(.Some("actual value"))
let strOptOpt2: String?? = .Some(.None)
let strOptOpt3: String?? = .None

为了安全地将它们解包到String,在Swift 1.1中,我们可以:

代码语言:javascript
复制
if let str:String = strOptOpt? {
    println(str)
}
else {
    println("was nil") // `.Some(.None)` or `.None`
}

但它在Swift 1.2中不再起作用:

代码语言:javascript
复制
if let str:String = strOptOpt? {
//                           ^ [!] error: '?' must be followed by a call, member lookup, or subscript

目前,我认为,我必须这样做:

代码语言:javascript
复制
if let strOpt = strOptOpt, str = strOpt {
    println(str)
}

或者使用switch

代码语言:javascript
复制
switch strOptOpt {
case let .Some(.Some(str)):
    println(str)
default:
    println("was nil")
}

但是,我认为肯定有更简单的方法来做到这一点。有人知道吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-30 02:18:48

从Swift 2开始,您可以将if/case与模式一起使用,并将x?作为.Some(x)的同义词

代码语言:javascript
复制
if case let str?? = strOptOpt1 {
    print(str)
} else {
    print("was nil") // `.Some(.None)` or `.None`
}
票数 2
EN

Stack Overflow用户

发布于 2015-04-10 17:13:23

对我来说,我找到的最好的解决方案是在可选绑定中使用??操作符。

代码语言:javascript
复制
let strOptOpt: String?? = ...

if let str = strOptOpt ?? nil {
    println(str) // "actual value"
}

适用于所有这些情况:

  • .Some(.Some("actual value"))
  • .Some(.None)
  • .None

但是,如果strOptOptString???,您应该这样做:

代码语言:javascript
复制
let strOptOpt: String??? = ...

if let str = (strOptOpt ?? nil) ?? nil {
    println(str)
}
票数 1
EN

Stack Overflow用户

发布于 2015-04-15 05:34:29

在这种情况下,我总是得到双可选

代码语言:javascript
复制
let field: ChangeField?? = json["field_id"].int.map{ ChangeField(rawValue: $0) }

您可以使用flatMap代替map

代码语言:javascript
复制
let field: ChangeField? = json["field_id"].int.flatMap{ ChangeField(rawValue: $0) }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28724946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档