Apple Combine的直通主体未编译



我有一个获取用户当前位置的类,我希望能够将最近获取的CLLocationError传递给SwiftUI 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))
    }
}

我收到以下编译错误:当我使用Error作为故障类型时Type 'LocationProvider' does not conform to protocol 'BindableObject'。但是,如果我将Error更改为 Never ,则文件编译成功。

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

BindableObject willChange中的发布者类型必须具有"从不"错误类型。如果这不是你想要的,你不能在这里使用简单的 BindableObject willChange

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

相关内容

  • 没有找到相关文章

最新更新