2016-09-27 3 views
0

Если бы быстрый вопрос: У меня есть Variable<[Session]>, где Session:RxSwift flatMap последний один раз без утилизации

class Session { 
    ... 
    var rx_serverRequestable: Driver<SessionRequestable> 
    ... 
} 

, который излучает .next события каждый раз, когда сеанс имеет всю информацию, которая должна быть передана на внутренний интерфейс, и я хочу, чтобы иметь возможность flatMapLatest на массиве сеансов, и сделать что-то вроде:

let sessions: Variable<[Session]> 
sessions 
    .flatMapLatest { sessions in sessions.map { $0. rx_serverRequestable } } 
    .flatMap { $0.requestFromServer() } 

, но я только хочу, чтобы просить каждую сессию один раз. Есть два способа, которые я вижу в том, что не удалось выполнить мою текущую реализацию: 1. flatMapLatest получает новый массив сеансов, потенциально удаляя запрос с сервера, который все еще выполняется. 2. rx_serverRequestable вызывается каждый раз, когда сессия имеет всю информацию, необходимую для загружаться с сервера, поэтому он будет вызываться несколько раз, каждый раз, когда сеанс загружается в любую новую информацию. Я только хочу, чтобы сессия была запрошена в первый раз, следует ли использовать что-то вроде .multicast или .replay(1)?

любые указатели на решение двух проблем или переключение моего подхода?

+0

Что вы планируете делать с результатом, вырабатываемым 'sessions.flatMapLatest ... flatMap' называть? –

+0

Назначьте информацию, полученную с сервера, обратно в переменные экземпляра на сеансе – AndrewSB

ответ

Смежные вопросы