flatMap的swift文档读取:
返回一个包含调用给定的非零结果的数组 用这个序列的每个元素进行转换。
在以下示例中,返回类型echo
留给编译器以推断ElementOfResult
按照文档记录工作,但在第5行指定flatMap
时,因此推断为{ {1}}输入似乎ElementOfResult
停止过滤掉Optional<String>
。
为什么这样做?
flatMap
答案 0 :(得分:2)
以下是flatMap()
public func flatMap<ElementOfResult>(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]
当您将resultTypeSpecified
的类型设置为[String?]
时,您告诉编译器ElementOfResult
是Optional<String>
。
您的转换闭包的类型为(String?) -> Optional<Optional<String>>
。
flatMap
将带走1&#34;图层&#34;期权而非2层。
希望这个例子能让事情更清楚:
let input: [String??] = [
Optional.some(Optional.some("1989")),
Optional.some(Optional.none),
Optional.some(Optional.some("Fearless")),
Optional.some(Optional.none),
Optional.some(Optional.some("Red"))
]
let output = input.flatMap({ $0 })