Ответ
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), который испускает данные независимо от наличия подписчиков.