Wenn ich vor der Anmeldung zuArray() hinzufügen, bekomme ich keinen Rückruf.RxSwift toArray() nicht abonnieren
googleCalendarUseCase.getEventsFromCalendars(calendars: selectedCalendars).subscribe(onNext: { (event) in
print(event.summary) //print thousands of elements
}).addDisposableTo(disposeBag)
googleCalendarUseCase.getEventsFromCalendars(calendars: selectedCalendars).toArray().subscribe(onNext: { (events) in
print(events.count) // Never gets called
}).addDisposableTo(disposeBag)
Vielleicht ist das Problem mit der Funktion getEventsFromCalendar aber noch nicht sicher, warum es funktioniert, wenn ich tun toArray nicht():
func getEventsFromCalendars(calendars: [GoogleCalendar.Calendar], nextPageToken: String? = nil) -> Observable<GoogleCalendar.Event> {
return Observable<GoogleCalendar.Event>.create { observer -> Disposable in
var parameters: [String: Any] = [:]
if let nextPageToken = nextPageToken {
parameters["pageToken"] = nextPageToken
}
_ = self.oauthswift.client.get(GoogleCalendarAPI.events, parameters: parameters, success: { (data, response) in
if let json = try? JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [String: AnyObject] {
if let nextPageToken = self.nextPageToken(json: json) {
_ = Observable.of(Observable.from(self.getEventsFromJSON(json: json)), self.getEventsFromCalendars(calendars: calendars, nextPageToken: nextPageToken))
.merge().subscribe(observer)
} else {
_ = Observable.from(self.getEventsFromJSON(json: json))
}
} else {
observer.onError(CustomError.other)
}}, failure: { (error) in observer.onError(CustomError.noInet) }
)
return Disposables.create()
}
}
, die falsch ist. Sie können ganz sicher ** ein "Observable" mehr als einmal abonnieren. Jedes Mal, wenn Sie sich anmelden, erstellen Sie eine brandneue Sequenz, aber das ist völlig in Ordnung, je nachdem, was Sie brauchen. Mit 'share()' erhalten Sie eine gemeinsame Sequenz, die je nach Ihren Bedürfnissen nützlich sein kann. Sie sind jedoch beide möglich und beide nützlich für verschiedene Zwecke. – solidcell
Ich stehe korrigiert –