2015-07-26 3 views
1

Пила на бумагах Колина Эберхарта, плавающих вокруг, что он сам сделал эти расширения. Он написал подпискуNextAs, но не всех остальных в Свифте.mapAs, filterAs, subscribeNextAs для ReactiveCocoa 3.0

Неправильно ли?

extension RACSignal { 

    func subscribeNextAs<T>(nextClosure:(T) ->()) ->() { 
     self.subscribeNext { 
     (next: AnyObject!) ->() in 
      let nextAsT = next as! T 
      nextClosure(nextAsT) 
     } 
    } 

    func filterAs<T>(nextClosure:(T!) -> Bool) -> (RACSignal) { 
      return self.filter { 
       (next: AnyObject!) -> Bool in 
       if(next == nil){ 
        return nextClosure(nil) 
       }else{ 
        let nextAsT = next as! T 
        return nextClosure(nextAsT) 
       } 
      } 
    } 

    func mapAs<T>(nextClosure:(T!) -> AnyObject!) -> (RACSignal) { 
      return self.map { 
       (next: AnyObject!) -> AnyObject! in 
       if(next == nil){ 
        return nextClosure(nil) 
       }else{ 
        let nextAsT = next as! T 
        return nextClosure(nextAsT) 
       } 
      } 
    } 


} 

ответ

3

Несмотря на то, что вы написали, кажется правильными, расширение тех, Колин Эберхарта были сделаны много времени назад для RAC v2, когда RAC v3 была на ранней стадии развития. В настоящее время это версия Release Candidate уже, так почему бы не использовать ее вместо этого? Это достаточно удобно. Xcode автоматически обнаруживает Signal «s тип

intSignal 
    |> filter { num in num % 2 == 0 } 
    |> map(toString) 
    |> observe(next: { string in println(string) }) 

Больше информации в README.md или Documentation folder

+0

вау болен !! это синтаксический сахар «|>» для всего длинного кода, который раньше был там !? Большое вам спасибо за ответы на мои вопросы. Вы, кажется, гуру в ReactiveCocoa. –

+0

Ну, это не синтаксический сахар, это совершенно новая архитектура. Это не 'RACSignal', это' Сигнал '. 'map' - это не метод экземпляра, возвращающий другой сигнал больше, это глобальная функция, возвращающая закрытие. '|>' - это просто оператор, который обертывает это закрытие вокруг получателя. Я просто использую ReactiveCocoa :) – ReDetection

+0

questino @ReDectection ugh Версия кандидата-кандидата действительно раздражает, чтобы интегрироваться в мой проект. Я выполнил их инструкции и принес файл .xcodeproject в свою папку с помощью xcode и попытался добавить ReactiveCocoa.framework с помощью «Вставить двоичный код» на вкладке «Общие», но он не будет создан ... вы сделали это вручную? Это было намного проще, используя Карфаген, но вручную это так больно –

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