Apple Combine的PassthroughSubject未编译

时间:2019-07-22 18:44:44

标签: combine

我有一个可获取用户当前位置的类,并且我希望能够将最近获取的CLLocationError传递给SwiftUI {{1} }。

下面是负责位置提取的类:

View

当我使用class LocationProvider: NSObject, BindableObject, CLLocationManagerDelegate { // MARK: - BindableObject var willChange = PassthroughSubject<CLLocation, Error>() // MARK: - CLLocationManagerDelegate func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } willChange.send(location) } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { willChange.send(completion: .failure(.unknown)) } } 作为失败类型时,出现以下编译错误:Type 'LocationProvider' does not conform to protocol 'BindableObject'。但是,如果我将Error更改为Error,则文件将成功编译。

我需要更改什么才能通过NeverCLLocation

1 个答案:

答案 0 :(得分:0)

BindableObject的willChange 必须中的发布者类型的错误类型为“从不”。如果那不是您想要的,则不能在此处使用简单的BindableObject的willChange

可能之后的状态是可绑定的对象,其发布者将发布结果。可以包含位置或错误,如果您明白我的意思,则可以在管道中进一步处理它。