Ios 忽略联合收割机中的错误
在RxSwift中,我可以忽略以下错误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
.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
}
}