Что такое Cold Observable в реактивном программировании?

«Что такое Cold Observable в реактивном программировании?» — вопрос из категории Реактивное программирование, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Cold Observable — это «ленивый» источник данных в реактивных фреймворках (RxSwift, Combine). Он начинает генерировать последовательность элементов только при появлении подписчика. Каждая новая подписка запускает независимое выполнение потока данных.

Ключевая характеристика: Данные производятся для каждого подписчика отдельно.

Пример на RxSwift:

// Cold Observable: сетевой запрос
let coldRequest = Observable<String>.create { observer in
    print("➡️ Выполняю сетевой запрос...") // Выполнится для КАЖДОГО подписчика
    // Имитация запроса
    observer.onNext("Данные с сервера")
    observer.onCompleted()
    return Disposables.create()
}

// Первая подписка
coldRequest.subscribe(onNext: { print("Подписчик 1: ($0)") })
// Консоль: "➡️ Выполняю сетевой запрос..."
// Консоль: "Подписчик 1: Данные с сервера"

// Вторая подписка (запрос выполнится снова)
coldRequest.subscribe(onNext: { print("Подписчик 2: ($0)") })
// Консоль: "➡️ Выполняю сетевой запрос..."
// Консоль: "Подписчик 2: Данные с сервера"

Типичные примеры Cold Observable:

  • Сетевые запросы.
  • Чтение данных из файла или базы данных.
  • Преобразование массива в поток (Observable.from([1,2,3])).

Противоположность: Hot Observable (например, события UI), который испускает данные независимо от наличия подписчиков.