2017-06-10 12 views
0

を監視して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>> 

任意のアイデア?ありがとう!

答えて

1

observeは、オプションの要素のObservableを返します。Observable<[CLLocationCoordinate2D]?>

それは非常に良好で、エラーではありません。もしそれが何のタイプそれあなたが戻ってきて、それが期待どおりに見ていたと言っていた場合は、より有益でした。

これは、変数を作成して代わりにそれを返すことで確認できました。あなたはどのタイプaObservable<[CLLocationCoordinate2D]?>)を見ることができただろうし、また、より良いエラーメッセージを得ているでしょう

var ob: Observable<[CLLocationCoordinate2D]> { 
    let a = self.rx.observe(Array<CLLocationCoordinate2D>.self, "locations") 
    return a 
} 

:その間違いを訂正する、だから、

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") 
} 
関連する問題