Заметили упоминания об этой вещи «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 для решения всех проблем, с которыми в настоящее время сталкивается человечество, — фразу, которую я использую лишь несколько остроумно…»
И некоторые примеры кодирования:
ReactiveCocoa / ReactiveCocoaIO : «платформа для доступа к файловой системе и управления ею с помощью сигналов…»
ReactiveCocoa / ReactiveCocoaLayout : «платформа для описания макетов Cocoa и Cocoa Touch реактивным способом…»
uasi / AFNetworking-ReactiveCocoa «делает AFNetworking реактивным».
В UIButton Edge Insets есть как RAC, так и не RAC реализации кода редактирования кнопок.
Machx / Reactive-Cocoa-Playground : «коллекция полезного и иногда экспериментального кода ReactiveCocoa».