为什么使用 Combine 的"捕获"会导致分段错误?



由于分段错误,我花了太长时间试图修复发布版本11。

最后,代码的更改是从这个。。。

fetchValue
.receive(on: scheduler)
.store(in: &subscriptions)
.sink { [weak self] completion in
switch completion {
case .failure(let error):
self?.state = .error(error.localizedDescription)
case .finished:
return
}
} receiveValue: { [weak self] value in
self?.state = .someValue(value)
}
.store(in: &subscriptions)

对此。。。

fetchValue
.map(State.someValue)
.catch { error in Just(State.error(error.localizedDescription)) }
.receive(on: scheduler)
.assign(to: .state, on: self)
.store(in: &subscriptions)

特别是catch线路导致了问题。

在上文中,CCD_ 2被定义为CCD_。

并且self.state被定义为类似于枚举的。。。

enum State {
case someValue(SomeValue)
case error(String)
}

它是为调试和测试而构建的,没有任何问题。

但是,当使用Xcode 13.0和13.1构建发布(存档(时,它导致了分段错误11,我不知道为什么?

您是否尝试使用实例方法而不是静态方法来映射枚举?

fetchValue
.map(State.someValue)

fetchValue
.map { State.someValue($0) }

相关内容

  • 没有找到相关文章

最新更新