gpt4 book ai didi

快速组合 : Merge publishers of different types

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

我正在尝试合并多个不同类型的发布者。

我有一个字符串类型的发布者和一个类型的发布者,但是当我使用 MergeManyCombineLatest 合并它们时,我得到一个类型不匹配的错误。

是否可以合并不同类型的发布者?请看下面的代码示例:

@Published var str1: String?
@Published var str2: String?
@Published var image: Image?

Publishers.MergeMany($str1, $str2, $image)
.removeDuplicates()
.sink { _ in
//...
}
.store(in: &bag)

最佳答案

假设您没有其他 @Published 属性,最简单的做法是使用 objectWillChange:

self.objectWillChange
.receive(on: RunLoop.main)
.sink {
print("objectWillChange...", self.str1, self.str2, self.image)
}
.store(in: &bag)

但是,这不会为您提供您在评论中提到的删除重复项。

如果你愿意,你可以让事情变得更复杂一些:

Publishers.MergeMany(
$str1.dropFirst().removeDuplicates().map({ _ in }).eraseToAnyPublisher(),
$str2.dropFirst().removeDuplicates().map({ _ in }).eraseToAnyPublisher(),
$image.dropFirst().removeDuplicates().map({ _ in }).eraseToAnyPublisher()
)
.receive(on: RunLoop.main)
.sink {
print("MergeMany...", self.str1, self.str2, self.image)
}
.store(in: &bag)

(可能有比我的 map.{ _ in } 更漂亮的方式去掉返回类型)

上述方法似乎可以有效地删除单个重复元素,并且仅在其中一个发生更改时触发 sink

关于快速组合 : Merge publishers of different types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67113778/

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