gpt4 book ai didi

swift - 组合中的 Publisher 与 AnyPublisher

转载 作者:行者123 更新时间:2023-12-01 04:27:05 27 4
gpt4 key购买 nike

AnyPublisher 在 Combine 中的作用是什么,以及为什么在许多示例中,包括在 WWDC Combine In practice, 27:40 中他们返回 AnyPublisher,使用 .eraseToAnyPublisher ,而不仅仅是返回一个Publisher?

Apple Documents

Use AnyPublisher to wrap a publisher whose type has details you don’t want to expose to subscribers or other publishers.



但是任何人都可以举一个例子说明它在哪里有用吗?

最佳答案

Publisher是具有关联类型的协议(protocol),而 AnyPublisher是一个结构。

尝试转换到 Publisher你得到一个错误

let x = Just(1) as Publisher

Protocol 'Publisher' can only be used as a generic constraint because it has Self or associated type requirements



尽管 JustPublisher .
Publisher type 不能以与 AnyPublisher 相同的方式使用实现类型删除。

您可以在哪里使用 Publisher是当您定义一个将泛型作为定义的一部分的函数时。

使用 AnyPublisher 的最常见原因:

从函数返回 Publisher 的实例。

使用 Publisher 的最常见原因:

创建协议(protocol)扩展以创建自定义组合运算符。例如:
extension Publisher {
public func compactMapEach<T, U>(_ transform: @escaping (T) -> U?)
-> Publishers.Map<Self, [U]>
where Output == [T]
{
return map { $0.compactMap(transform) }
}
}

关于swift - 组合中的 Publisher 与 AnyPublisher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57690243/

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