栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何解开double可选项?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何解开double可选项?

给定一个double可选,如以下双重包装

String

let a: String?? = "hello"print(a as Any) // "Optional(Optional("hello"))n"

@Leo 表明您可以使用 可选绑定 两次:

if let temp = a, let value = temp {    print(value) // "hellon"}

或强制解开两次:

print(value!!)  // don't do this - you're just asking for a crash

您可以使用以下5种方法来安全解开double可选:

方法1:

您还可以使用 模式匹配

if case let value?? = a {    print(value) // "hellon"}

正如@netigger在回答中指出的那样,它也可以写成:

if case .some(.some(let value)) = a {    print(value) // "hellon"}

简洁性虽然较差,但较容易阅读。


方法2:

另外,您可以两次使用 nil合并运算符

??

print((a ?? "") ?? "")  // "hellon"

注意: 与此处介绍的其他方法不同,这将始终产生一个值。 如果任一可选参数为,则使用

""
(空
String
nil


方法3:

或者,您可以将 nil合并运算符

??
可选绑定一起使用

if let value = a ?? nil {    print(value)  // "hellon"}

这是如何运作的?

用双重包裹可选的,由变量保持的值可以是3件事情之一:

Optional(Optional("somestring"))
Optional(nil)
如果内可选的是
nil
,或
nil
如果外可选的是
nil
。因此,
??nil
将外部可选项解包。如果外部可选参数为
nil
,则将其
??
替换为默认值
nil
。如果
a
Optional(nil)
??
则将打开外部可选的包装
nil
。在这一点上,你将有一个
String?
就是
nil
如果任何内部或外部可选的
nil
。如果有
String
内部,则得到
Optional("somestring")

最后,如果两个可选参数中的任意一个为且跳过了该块,则 可选绑定

if let
)解开
Optional("somestring")
以获得
"some string"
可选绑定 失败
nil


方法4:

此外,您还可以使用

flatMap
带有 可选的结合

if let value = a.flatMap({ $0 }) {    print(value)  // "hellon"}

方法5:

有条件地将值强制转换为类型。令人惊讶的是,这将删除所有级别的可选选项:

let a: String?? = "hello"let b: String??????? = "bye"if let value = a as? String {    print(value)  // "hellon"}print(b as Any)  // "Optional(Optional(Optional(Optional(Optional(Optional(Optional("bye")))))))n"if let value = b as? String {    print(value)  // "byen"}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636284.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号