Статьи

ReactiveCocoa

Заметили упоминания об этой вещи «ReactiveCocoa», появившейся в последнее время? Да, мы тоже. Давайте немного посмотрим, что это такое, не так ли?

ReactiveCocoa / ReactiveCocoa : «является структурой Objective-C для функционального реактивного программирования . Он предоставляет API для составления и преобразования потоков значений ».

Еще не испытываете волнение? Понятный. Так что же это за штука FRP ?

Функциональное реактивное программирование (FRP) — это парадигма программирования для написания программного обеспечения, которое реагирует на изменения.

FRP построен на абстракции ценностей во времени. Вместо того, чтобы фиксировать значение в определенное время, FRP предоставляет сигналы, которые фиксируют прошлое, настоящее и будущее значение. Эти сигналы можно аргументировать, связывать, составлять и реагировать на них.

Комбинируя сигналы, программное обеспечение может быть написано декларативно, без необходимости кода, который постоянно наблюдает и обновляет значения. Например, текстовое поле может быть напрямую установлено, чтобы всегда показывать текущую метку времени, вместо использования дополнительного кода, который следит за часами и обновляет текстовое поле каждую секунду.

Сигналы также могут представлять асинхронные операции, очень похожие на фьючерсы и обещания. Это значительно упрощает асинхронное программное обеспечение, включая сетевой код …

Если это слишком абстрактно, чтобы с ним легко было справиться, NSHipster представит приятное введение для неспециалистов :

ReactiveCocoa состоит из двух основных компонентов: сигналов (RACSignal) и последовательностей (RACSequence) .

И сигналы, и последовательности являются разновидностями потоков , совместно использующих одни и те же операторы. ReactiveCocoa преуспел в том, чтобы абстрагировать широкий набор функций в семантически плотную, согласованную конструкцию: сигналы — это поток, управляемый нажатием, а последовательности — поток, управляемый извлечением…

Итак, это в основном модные штаны КВО, тогда? Нет, это недооценивает это, проверьте это сообщение ReactiveCocoa: First Impressions :

«Ну и что?», Я слышу, вы говорите: «Это хорошая обертка для KVO, большой возглас». Ну, это становится лучше: в дополнение к просто KVO API, ReactiveCocoa позволяет вам выражать сложные условные поведения.

Пример GitHub выглядит следующим образом:

[[[[RACAbleSelf(self.username) distinctUntilChanged] take:3]
     where:^(NSString *newUsername) {
        return [newUsername isEqualToString:@"joshaber"];
     }]
     subscribeNext:^(id _) {
        NSLog(@"Hi me!");
     }];

Вот их объяснение того, что происходит:

Мы следим за изменениями в имени пользователя, отфильтровываем непонятные изменения, принимаем только первые три непонятных значения, а затем, если новое значение равно «joshaber», мы выводим приятное приветствие.

При использовании одного KVO это просто невозможно: нам нужно отслеживать и сохранять значение имени пользователя, чтобы сравнивать его с новым значением и держать счетчик для увеличения при каждом получении непонятного значения. Это, конечно, будет более шести строк кода …

ОК, это как KVO, плюс привязки какао , только не сосание. Ну, это довольно изящно. Определенно что-то, что можно попробовать в следующий раз, когда у нас есть сложный шаблон для реализации!

Вот еще несколько дискуссионных постов, которые стоит прочитать:

Вход и выход

Лучший код для лучшего мира : «… введение в использование ReactiveCocoa для решения всех проблем, с которыми в настоящее время сталкивается человечество, — фразу, которую я использую лишь несколько остроумно…»

Базовый MVVM с ReactiveCocoa

И некоторые примеры кодирования:

ReactiveCocoa / ReactiveCocoaIO : «платформа для доступа к файловой системе и управления ею с помощью сигналов…»

ReactiveCocoa / ReactiveCocoaLayout : «платформа для описания макетов Cocoa и Cocoa Touch реактивным способом…»

uasi / AFNetworking-ReactiveCocoa «делает AFNetworking реактивным».

В UIButton Edge Insets есть как RAC, так и не RAC реализации кода редактирования кнопок.

Machx / Reactive-Cocoa-Playground : «коллекция полезного и иногда экспериментального кода ReactiveCocoa».