RxSwift: преобразование наблюдаемой в переменную - PullRequest
0 голосов
/ 27 мая 2018

Как мне преобразовать Observable типа Int в переменную типа Int?

Вот что я пробовал до сих пор:

let obs: Observable<Int> = Observable.of(4)

let variable: Variable<Int> = obs
    .flatMap { num in
        return Variable<Int>(num)
    }

Использование flatMap кажется наиболее логичнымОднако, выполняя преобразование, я получаю ошибку компилятора, которая, по сути, говорит, что ей не нравится flatMap, возвращающий что-либо, что не является наблюдаемым.Любые идеи?

РЕДАКТИРОВАТЬ:

Просто чтобы дать некоторый контекст о том, почему мне нужно преобразовать Observable в переменную:

Мне нужен мой viewModel для управления UIPickerView внутриViewController.В настоящее время у меня есть два открытых свойства в моей ViewModel, items: Observable <[String]> (который является источником данных для UIPickerView) и selectedIndex: Variable.SelectedIndex будет управлять начальным значением UIPickerView, но также будет отслеживать любые изменения, которые делает пользователь.

Причина, по которой мне нужно было преобразовать Observable в Variable, заключалась в том, что мне нужно было выяснить, какой индекс UIPickerViewдолжен быть выбран изначально:

items.map { days -> Int in
    if let index = days.index(where: { str in
        return str == selectedDay
    }) {
        return index
    }
    return 0
}
.flatMap { num in
    return Variable<Int>(num)
}

Теперь мне интересно, не слишком ли я усложняю вещи, и если вместо переменной in у меня просто будет Observable.

1 Ответ

0 голосов
/ 27 мая 2018

Несколько моментов здесь:

Во-первых, вы должны не использовать Variable, поскольку это устарело (вероятно, в Swift 5 это будет полностью устарело).Взгляните на BehaviorSubject и BehaviorRelay.

По поводу вашего вопроса, я не уверен, каков вариант использования Variable, равного наблюдаемой, поэтому у меня есть две разные мысли:

  1. Вы можете привязать Наблюдаемое к Переменной / Субъекту / Реле (например, observable.bind(to: variable))
  2. Вы можете пойти другим путем, чтобы получить Наблюдаемое из Переменная, которая может иметь больше смысла.например, variable.asObservable()
...