1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/DKJone-RxSwift-document-translation

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Introduction.md 5.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 04:47 73ec4a0

Введение

Зачем нам использовать RxSwift?

Большая часть нашего кода включает в себя обработку событий, связанных с элементами интерфейса. Когда пользователь взаимодействует с элементом управления, мы должны написать обработчик @IBAction для реагирования на действия пользователя. Нам нужно подписаться на уведомления, чтобы отслеживать изменения положения клавиатуры. Когда URL sessions возвращают данные, нам необходимо предоставить исполняемый блок. Мы используем KVO для отслеживания изменений переменных. Все эти механизмы делают наш код излишне сложным. Есть ли что-то лучше, чем использование одного механизма для обработки всех запросов и ответов? Именно здесь на помощь приходит Rx.

RxSwift — это реализация официальных Reactive Extensions (также известных как Rx), которые поддерживают множество языковых платформ.

Концепция

Каждый экземпляр Observable представляет собой очередь. Основное преимущество Observable по сравнению с Swift SequenceType заключается в том, что он всё ещё может принимать асинхронные элементы, и это является основой RxSwift. Всё остальное строится на этом фундаменте.

  • Observable (ObservableType) эквивалентен SequenceType.
  • ObservableType.subscribe(_:) метод эквивалентен SequenceType.generate().
  • Метод ObservableType.subscribe(_:) требует наблюдателя (ObserverType) в качестве параметра, который автоматически подписывается на события, генерируемые Observable, вместо ручного использования метода Next() для подписки на обратные вызовы.

Если Observable генерирует событие next (Event.next(Element)), он может продолжать генерировать больше событий. Однако если он генерирует ошибку (Event.error(ErrorType)) или завершает работу (Event.completed), он больше не сможет отправлять события подписчикам.

Вот более краткое изложение этой концепции:

next* (error | completed)?

Графики могут помочь объяснить это более наглядно:

--1--2--3--4--5--6--|----> // "|" = нормальная остановка
--a--b--c--d--e--f--X----> // "X" = остановка при ошибке
--tap--tap----------tap--> // "|" = никогда не останавливается, например, очередь событий нажатия кнопки

Эти графики называются диаграммами мраморного камня. Вы можете узнать больше на сайте RxMarbles.com.

Наблюдаемые объекты и наблюдатели (также называемые подписчиками)

Объекты, которые можно подписать (Observables), не будут выполнять свои блоки подписки до тех пор, пока у них не появятся подписчики. В следующем примере блок никогда не будет выполнен, потому что у него нет подписчиков:

example("Observable with no subscribers") {
    _ = Observable<String>.create { observerOfString -> Disposable in
        print("This will never be printed")
        observerOfString.on(.next("😬"))
        observerOfString.on(.completed)
        return Disposables.create()
    }
}

В следующем примере блок будет выполняться при подписке (subscribe(_:)):

example("Observable with subscriber") {
  _ = Observable<String>.create { observerOfString in
            print("Observable created")
            observerOfString.on(.next("😉"))
            observerOfString.on(.completed)
            return Disposables.create()
        }
        .subscribe { event in
            print(event)
    }
}

Не беспокойтесь о том, как создаются Observables, мы рассмотрим это в следующей главе.

Метод subscribe(_:) возвращает экземпляр Disposable, представляющий собой одноразовый ресурс, такой как подписка. Он был проигнорирован в предыдущем простом примере, но часто используется правильно. Это означает, что его следует поместить в экземпляр DisposeBag, чтобы он обрабатывался должным образом. В последующих примерах мы будем включать соответствующую обработку, поскольку практика — лучший способ обучения!

Вы можете узнать больше о Disposing в разделе «Введение» на GitHub.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/DKJone-RxSwift-document-translation.git
git@api.gitlife.ru:oschina-mirror/DKJone-RxSwift-document-translation.git
oschina-mirror
DKJone-RxSwift-document-translation
DKJone-RxSwift-document-translation
master