gpt4 book ai didi

swift - 如何在不解包的情况下对可选类型执行闭包?

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

我有一个 Swift 可选类型,我想将一个转换链接到它 (map),并最终将它传递给一个打印它的闭包。

我想避免展开(使用 !)可选类型,因为我不想执行闭包,除非我们在可选类型中有一些东西。

在 Scala 中,我们使用 foreach 作为返回 Unit 的 map

val oi = Option(2)
oi.map(_+1).foreach(println)

在 Swift 中,我只得到增量(以及到字符串的转换)

let oi:Int? = 1
let oiplus = oi.map({$0 + 1}).map({String($0)})
// now we have "2"

现在,只有在可选值不为 nil 的情况下,我如何将它传递给 print()

最佳答案

我会在上面映射

let oi: Int? = 1
let oiplus = oi.map{ $0 + 1 }.map { String($0) }
oiplus.map { print($0) }

可以说映射不会产生副作用,但在 Swift 中没有用于 Optionalforeach。这也会在 Swift 2 中产生一个 unused result 警告。

如果语义(和警告)困扰您,您始终可以为 Optional 定义自己的 foreach。这非常简单:

extension Optional {
func forEach(f: Wrapped -> Void) {
switch self {
case .None: ()
case let .Some(w): f(w)
}
}
}

然后

let oi: Int? = 1
let oiplus = oi.map{ $0 + 1 }.map { String($0) }
oiplus.forEach { print($0) }

尽可能类似于 scala。

关于swift - 如何在不解包的情况下对可选类型执行闭包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33319249/

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