2015-02-20 4 views
0

Я пытаюсь понять этот кусок кода и почему он возвращает сигнал сигналов.Сигнал сигналов? Reactive Cocoa

[[[self.signInButton 
    rac_signalForControlEvents:UIControlEventTouchUpInside] 
    map:^id(id x) { 
    return [self signInSignal]; 
    }] 
    subscribeNext:^(id x) { 
    NSLog(@"Sign in result: %@", x); 
    }]; 

Из того, что я понимаю, что UIControlEventTouchupInside возвращает следующий сигнал, который содержит UIButton, когда разворачивал в функции карты.

Итак, можно ли заключить, что когда я выполняю карту, он ожидает, что возвращаемый объект является объектом (который является сигналом), и он дважды обертывает сигнал в сигнал. Это реактивное какао обычно ожидает, что тип будет типом объекта и обернут его сигналом?

Или

ли я что-то пропустил, и мое понимание карты не так, Он преобразует входное значение, и выдает выходное значение, (независимо от значения входного иногда)

Спасибо, что я новичок в этом, любой совет будет приятным!

Другой связанный с этим вопрос,

Давайте просто скажем, что событие UIControl подправить внутри отправляет и событие ошибки, будет ли это быть пойманным подписываться следующую ошибку?

+0

Сво хороший учебник, чтобы понять [ReactiveCocoa] (http://www.raywenderlich.com/62699/reactivecocoa-tutorial-pt1) – Pawan

+0

То есть, где я получил код из –

ответ

3

Код выглядит неправильно. Вы правильно понимаете, что код принимает сигнал нажатия кнопок и отображает его на сигнал «сигналов входа». Да, сигнал сигналов. Хотя сигнал сигналов является общим и очень полезным, он ничего не сделает без использования одного из этих трех операторов: flatten, concat или switchToLatest. В данном коде signInSignal никогда не будет запущен, потому что ни один из этих операторов не используется.

Если вы переключите map: на номер flattenMap:, сигнал входа будет правильно запущен.

[[[self.signInButton 
    rac_signalForControlEvents:UIControlEventTouchUpInside] 
    flattenMap:^id(id x) { 
     return [self signInSignal]; 
    }] 
    subscribeNext:^(id x) { 
     NSLog(@"Sign in result: %@", x); 
    }]; 
+0

код неверен для этого пример. Таким образом, функция отображения в этом смысле не ведет себя так, как ведет себя функция отображения для потоков, основанных на потоке, т. Е. Создает новый объект и помещает этот новый объект в массив? Скорее функция карты будет 1.pass в сигнале (uibutton *) 2.unwrap the from signal (uibutton *) 3. разрешите преобразование кнопки ui. 4a.in этого случая, если мы возвращаем сигнал будет обернуть сигнал в сигнале 5b.Resulting в сигнале сигналов в противном случае, если это тип объекта 4b. оберните объект в сигнал 5b. в результате получился сигнал –

+0

Я не уверен, в чем ваш вопрос. Вы можете перефразировать? –

+0

Работает ли функция карты в потоке, основанном на потоке, иначе, чем функция карты, основанная на потоках, основанных на потоке? –