title: Combine: how to replace/catch an error without completing the original publisher?
body: <p>Given the following code:</p>
  
  <pre><code>    enum MyError: Error {
          case someError
      }
  
      myButton.publisher(for: .touchUpInside).tryMap({ _ in
          if Bool.random() {
              throw MyError.someError
          } else {
              return "we're in the else case"
          }
      })
          .replaceError(with: "replaced Error")
          .sink(receiveCompletion: { (completed) in
              print(completed)
          }, receiveValue: { (sadf) in
              print(sadf)
          }).store(in: &amp;cancellables)
  </code></pre>
  
  <p>Whenever I tap the button, I get <code>we're in the else case</code> until <code>Bool.random()</code> is true - now an error is thrown. I tried different things, but I couldn't achieve to catch/replace/ignore the error and just continue after tapping the button.</p>
  
  <p>In the code example I would love to have e.g. the following output</p>
  
  <pre><code>we're in the else case
  we're in the else case
  replaced Error
  we're in the else case
  ...
  </code></pre>
  
  <p>instead I get <code>finished</code> after the <code>replaced error</code> and no events are emitted.</p>
  
  <p><strong>Edit</strong>
  Given a publisher with <code>AnyPublisher&lt;String, Error&gt;</code>, how can I transform it to a <code>AnyPublisher&lt;String, Never&gt;</code> without completing when an error occurs, i.e. ignore errors emitted by the original publisher?</p>