mapAs, filterAs, подписаться Следующие за ReactiveCocoa 3.0

Увидел плавающие вокруг Колина Эберхарта PDF-файлы, в которых он сам сделал эти дополнения. Он написал "подписаться на последующие", но не на других в Свифте.

Это правильно?

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)
                }
            }
    }


}

1 ответ

Решение

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

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

Больше информации в README.md или папке с документацией

Другие вопросы по тегам