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 или папке с документацией