RxSwift:观察存储在UserDefaults中的数组
问题描述:
我试图观察我的UserDefaults
以监视对locations
的更改,它是CLLocationCoordinate2D
的数组。RxSwift:观察存储在UserDefaults中的数组
这里就是我想:
extension UserDefaults {
var ob: Observable<[CLLocationCoordinate2D]> {
return self.rx.observe(Array.self, "locations")
}
}
但我得到这个错误:
no 'observe' candidates produce the expected contextual result type 'Observable<[CLLocationCoordinate2D]>' (aka 'Observable<Array<CLLocationCoordinate2D>>
任何想法?谢谢!
答
observe
将返回一个可选元素的Observable
:Observable<[CLLocationCoordinate2D]?>
这不是一个很好的错误。如果它看到你试图返回的是什么类型的是,而不是它所期望的,它会更有帮助。
你可能已经看到这种方式的一种方法是创建一个变量,然后返回。
var ob: Observable<[CLLocationCoordinate2D]> {
let a = self.rx.observe(Array<CLLocationCoordinate2D>.self, "locations")
return a
}
你就已经能够看到a
是什么类型(Observable<[CLLocationCoordinate2D]?>
),并会得到一个更好的错误消息:
Cannot convert return expression of type 'Observable<[CLLocationCoordinate2D]?>' (aka 'Observable<Optional<Array<CLLocationCoordinate2D>>>') to return type 'Observable<[CLLocationCoordinate2D]>' (aka 'Observable<Array<CLLocationCoordinate2D>>')
所以,纠正错误,你的代码应该看起来像这样的:
var ob: Observable<[CLLocationCoordinate2D]?> {
return self.rx.observe(Array.self, "locations")
}
虽然我会建议你不要依赖类型推断,而是更明确一些数组元素类型。斯威夫特有足够的时间,因为它是:
var ob: Observable<[CLLocationCoordinate2D]?> {
return self.rx.observe(Array<CLLocationCoordinate2D>.self, "locations")
}