Ios 忽略联合收割机中的错误

Ios 忽略联合收割机中的错误,ios,swift,rx-swift,combine,Ios,Swift,Rx Swift,Combine,在RxSwift中,我可以忽略以下错误 .catchError{{在Observable.never()中} 为什么这在联合收割机中不起作用(例如,它仍然完成) .catch{{在空中(completeImmediately:false)} 掷完球。输出为: 5 4 3 2 1 我很高兴有人能在评论中帮助你,因为你在问为什么你的代码显然没有完成 struct SimpleError: Error {} let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6] l

在RxSwift中,我可以忽略以下错误
.catchError{{在Observable.never()中}

为什么这在联合收割机中不起作用(例如,它仍然完成)
.catch{{在空中(completeImmediately:false)}

掷完球。输出为:

5
4
3
2
1

我很高兴有人能在评论中帮助你,因为你在问为什么你的代码显然没有完成

struct SimpleError: Error {}
let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
let cancellable = numbers.publisher
    .tryFilter { int -> Bool in
        guard int != 0 else {throw SimpleError()}
        return true
    }
    .catch { _ in Empty(completeImmediately: false) }
    .print("I have modified the answer a bit:

struct SimpleError: Error {}
let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
let cancellable = numbers.publisher
    .map { (value) -> Result<Int, Error> in
        Result {
            guard value != 0 else {
                throw SimpleError()
            }
            return value
        }
    }
    .sink { result in
        switch result {
        case .success (let value):
            print ("\(value)")
        case .failure(let error):
            break
        }
    }
struct SimpleError:错误{}
让数字=[5,4,3,2,1,0,9,8,7,6]
let cancelable=numbers.publisher
.tryFilter{int->Bool-in
guard int!=0 else{throw simplerror()}
返回真值
}
.catch{inempty(completeImmediately:false)}

.print(“我对答案做了一些修改:

struct SimpleError:错误{}
让数字=[5,4,3,2,1,0,9,8,7,6]
let cancelable=numbers.publisher
.map{(值)->导致
结果{
保护值!=0其他值{
抛出SimpleError()
}
返回值
}
}
.sink{导致
切换结果{
成功案例(let value):
打印(“\(值)”)
案例。失败(let错误):
打破
}
}
这有两个好处:

  • 流不会停止,它会继续发布
  • 错误不会丢失;如果需要,可以检查、显示或处理错误

否,
。catch{{uu.in Empty(completeImmediately:false)}
未完成。请显示更多实际上下文,并解释您认为它完成的原因。添加了一个示例您将
.print()放在
上游。抛出确实会取消上游,但
.catch
实际上会阻止错误向下流动。防止错误向下流动的方法是将取消限制在使用
.flatMap
生成的子管道上。这样它就无法渗透到出版商。我书中的示例:是的-我在寻找时非常不清楚ion试图简化它。我不希望Cancelable停止,当它抛出错误时就会停止。这是我真正的代码(未显示),因为我的捕获在平面图之外,而不是在平面图内部。我以前在RxSwift中也发现了一些东西!谢谢Daniel。奇怪的是,当我把它放在操场上时,它仍然在“1”之后停止“.我做错了吗?
struct SimpleError: Error {}
let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
let cancellable = numbers.publisher
    .tryFilter { int -> Bool in
        guard int != 0 else {throw SimpleError()}
        return true
    }
    .catch { _ in Empty(completeImmediately: false) }
    .print("I have modified the answer a bit:

struct SimpleError: Error {}
let numbers = [5, 4, 3, 2, 1, 0, 9, 8, 7, 6]
let cancellable = numbers.publisher
    .map { (value) -> Result<Int, Error> in
        Result {
            guard value != 0 else {
                throw SimpleError()
            }
            return value
        }
    }
    .sink { result in
        switch result {
        case .success (let value):
            print ("\(value)")
        case .failure(let error):
            break
        }
    }