我可以猜到你为什么感到困惑,尽管我不确定。我认为您认为.map
(和它的兄弟,.flatMap
and .compactMap
)只能用于集合(例如数组)。那是完全错误的。.map
(和其他 2 个)具有transformation的含义,而不是遍历集合/数组。因此,虽然它们可以用于数组,但它们也有更多的用例。您可以在此处
阅读有关这 3 种之间差异的更多信息。
在您展示的代码中,该博客文章的作者使用意图将一个值(又名数据?)转换为他想要的值。map
.flatMap
Optional<Data>
[URL: Bool]
let udData = UserDefaults.standard.data(forKey: "isReadStatuses")
// Short way:
let isReadStatuses1 = udData.flatMap {
try? JSONDecoder().decode([URL: Bool].self, from: $0)
} ?? [:]
// Long way:
let isReadStatuses2: [URL: Bool]
if let data = udData {
isReadStatuses2 = (try? JSONDecoder().decode([URL: Bool].self, from: data)) ?? [:]
} else {
isReadStatuses2 = [:]
}