当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional.Publisher map(_:)用法及代码示例


用法一

实例方法

map(_:)

发布键路径的值。

声明

func map<T>(_ keyPath: KeyPath<Self.Output, T>) -> Publishers.MapKeyPath<Self, T>

返回值

发布 key 路径值的发布者。

参数

keyPath

Output 上的属性的关键路径。

详述

在以下示例中,Publisher/map(_:)-6sm0a 运算符使用 Swift 键路径语法访问由 Just 发布者发布的 DiceRoll 结构的 die 成员。

下游接收器订阅者仅接收此 Int 的值,而不是整个 DiceRoll


struct DiceRoll {
    let die: Int
}


cancellable = Just(DiceRoll(die:Int.random(in:1...6)))
    .map(\.die)
    .sink {
        print ("Rolled: \($0)")
    }
// Prints "Rolled: 3" (or some other random value).

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

用法二

实例方法

map(_:)

使用提供的闭包转换来自上游发布者的所有元素。

声明

func map<T>(_ transform: @escaping (Self.Output) -> T) -> Publishers.Map<Self, T>

返回值

发布者使用提供的闭包将元素从上游发布者映射到然后发布的新元素。

参数

transform

将一个元素作为其参数并返回一个新元素的闭包。

详述

Combine 的 Publisher/map(_:)-99evh 操作符执行的函数类似于 Swift 标准库中的 map(_:) :它使用闭包来转换从上游发布者接收到的每个元素。您使用Publisher/map(_:)-99evh 从一种元素转换为另一种元素。

以下示例使用数字数组作为基于集合的发布者的源。 Publisher/map(_:)-99evh 运算符使用来自发布者的每个整数,并使用字典将其从阿拉伯数字转换为罗马等价数字,如 String 。如果 Publisher/map(_:)-99evh 的闭包无法查找罗马数字,则返回字符串 (unknown)


let numbers = [5, 4, 3, 2, 1, 0]
let romanNumeralDict: [Int : String] =
   [1:"I", 2:"II", 3:"III", 4:"IV", 5:"V"]
cancellable = numbers.publisher
    .map { romanNumeralDict[$0] ?? "(unknown)" }
    .sink { print("\($0)", terminator: " ") }


// Prints: "V IV III II I (unknown)"

如果您的闭包可能引发错误,请改用 Combine 的 Publisher/tryMap(_:) 运算符。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional.Publisher map(_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。