如何创建一个组合管道以发出被点击的选项

问题描述

我有一个下拉列表,其中显示了一些选项。我想创建一个发布该发布然后被点击的选项的发布者。

我有一个属性,指示selectedDropdown

@Published var selectedDropdown: Dropdownviewmodel?
struct Dropdownviewmodel {
  var options: [Dropdownoption]
  ...
}
struct Dropdownoption {
    var select = PassthroughSubject<Void,Never>()
    ...
}

这是我必须去的地方

  var optionTap: AnyPublisher<Dropdownoption,Never> {
        let selectedDropdown = $selectedDropdown.compactMap { $0 }
        let options = selectedDropdown.map { $0.options }
        let selectStream = options.map {
            $0.map { option in option.select.flatMap { Just(option) } }
        }.erasetoAnyPublisher()
        return selectStream
    }

我希望在有select.send(())时发出Dropdownoption的流,但是在这里我映射了将不起作用的映射-我可以在这里使用运算符吗?

编辑:

这就是我实际进行下拉水龙头的方式...

  var dropdownTaps: AnyPublisher<Dropdownviewmodel?,Never> {
        Publishers.Merge3(
            tap(on: dropdown1),tap(on: dropdown2),tap(on: dropdown3)
        ).erasetoAnyPublisher()
    }
  private func tap(on dropdown: Dropdownviewmodel) -> AnyPublisher<Dropdownviewmodel?,Never> {
        dropdown.tap.map { dropdown }.erasetoAnyPublisher()
    }
dropdownTaps.assign(to: &$selectedDropdown)

如果可能的话,我想达到类似的目的

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)