По RxSwift4, Variable перемещается в Deprecated.swift маркировки возможного Deprecation из Variable в будущем. Альтернативой, предлагаемой Variable является BehaviorRelay. Во время публикации этого вопроса, поскольку я не мог найти большую часть учебника по сети, используя BehaviorRelay я размещаю такой фундаментальный вопрос здесь, в SO.
Предположим, что у меня есть вызов webService, и я получаю кусок данных, который является JSONArray, при разборе JSON-объекта один за другим. Я обновляю свойство Variable value
Вот мое объявление переменной
var myFilter = Variable<[MyFilterModel]>([MyFilterModel(data: "{:}")])
 при получении нового элемента каждый раз, когда я обновляю переменную как
myFilter.value.append(newModel)
 Поскольку переменная была привязана к CollectionView, collectionVie немедленно обновлял свой интерфейс с недавно добавленным объектом.
Проблема с BehaviorRelay
Теперь моя декларация выглядит
var myFilter = BehaviorRelay<[MyFilterModel]>(value: [MyFilterModel(data: "{:}")])
  Но самая большая проблема заключается в том, что myFilter.value является readOnly. Так очевидно
myFilter.value.append(newModel) 
  не является решением. Я понял, что могу использовать скорее accept.
Но теперь, когда я пытаюсь проанализировать каждый элемент в ответ и обновить значение myFilter
self?.expertsFilter.accept(newModel)
 Вышеприведенный оператор дает котировку ошибок
Невозможно преобразовать значение NewModel в ожидаемый тип аргумента [NewModel]
Очевидно, что он ожидает массив, а не отдельный элемент.
Временное решение:
Решение 1:
 Таким образом, одно решение накапливает весь ответ во временном массиве и однажды запускает self?.expertsFilter.accept(temporary_array)
Решение 2:
 Если мне нужно отправить событие onNext подписчику на разбор каждого элемента, мне нужно скопировать значение self?.ExpertsFilter в новый массив, добавить к нему вновь обработанный элемент и вернуть новый массив.
Решение 3:
 Избавьтесь от BehaviorRelay и используйте BehaviorSubject/PublishSubject
Первые два звучат угнетающе, потому что может возникнуть необходимость запуска пользовательского интерфейса при разборе каждого элемента, который я не могу подождать, пока не будет проанализирован весь ответ. Поэтому очевидно, что решение1 не очень полезно.
Второе решение гораздо более ужасно, потому что он создает новый массив (я знаю его временный и будет выпущен) каждый раз, чтобы отправить событие onNext.
Вопрос:
 Поскольку BehaviorRelay предлагается в качестве альтернативы Variable am в дилемме, я использую accept правильно?? Есть ли лучший способ решить эту проблему?
Пожалуйста помоги