2015-05-28 2 views
1
-(instancetype)filter:(BOOL (^)(id value))block { 
NSCParameterAssert(block != nil); 

Class class = self.class; 

return [[self flattenMap:^ id (id value) { 
    if (block(value)) { 
     return [class return:value]; 
    } else { 
     return class.empty; 
    } 
}] setNameWithFormat:@"[%@] -filter:", self.name]; 

}Как работает метод фильтрации?

Это реализация фильтра ReactiveCocoa.I не знаю, что этот код means.Also я не могу получить любую ссылку на второй метод возврата.

return [class return:value]; 

Кроме того, что означает этот тип instancetype? Предположим, что значение - это строка, и я проверяю, больше ли ее длина 2. Что будет возвращено с помощью метода фильтра?

+0

«instancetype» означает, что если вы вызываете это на «RACSignal», вы получите ответ «RACSignal», и если вы вызовете его на «RACSequence», вы получите «RACSequence» назад, так что вам не нужно снижать с «RACStream». Обычно вы видите это на методах класса, хотя ... –

ответ

0

Метод фильтра вызывает метод класса текущего класса для получения подкласса RACStream с использованием этого метода. Использование return: даст сигнал, который отправляет переданное значение и затем завершается. Использование empty дает сигнал, который немедленно отправляет завершенное без отправки следующего значения, которое удаляет значение отфильтрованного значения из потока, благодаря flattenMap:, вызывая сигнал с создаваемой.

+1

Я не заметил, что метод return был определен ранее в этом классе. Однако это имя метода также немного запутанно. – sevenkplus

+0

Это очень краткое описание того, что на самом деле делает этот метод, который аккуратен после того, как вы пройдете эту первоначальную путаницу. –

Смежные вопросы