gpt4 book ai didi

swift - 如何在 Swift 1.2 中解包 Optional>

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:41 24 4
gpt4 key购买 nike

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

let strOptOpt1: String?? = .Some(.Some("actual value"))
let strOptOpt2: String?? = .Some(.None)
let strOptOpt3: String?? = .None

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

if let str:String = strOptOpt? {
println(str)
}
else {
println("was nil") // `.Some(.None)` or `.None`
}

但它在 Swift 1.2 中不再有效:

if let str:String = strOptOpt? {
// ^ [!] error: '?' must be followed by a call, member lookup, or subscript

目前,我想,我必须这样做:

if let strOpt = strOptOpt, str = strOpt {
println(str)
}

或使用开关:

switch strOptOpt {
case let .Some(.Some(str)):
println(str)
default:
println("was nil")
}

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

最佳答案

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

if case let str?? = strOptOpt1 {
print(str)
} else {
print("was nil") // `.Some(.None)` or `.None`
}

关于swift - 如何在 Swift 1.2 中解包 Optional<Optional<T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28724946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com