在科林·埃伯哈特(Colin Eberhart)的pdf文件中看到,他自己做了这些扩展。他写过subscribeNextAs,但在Swift中没有写过。
以下内容正确吗?
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)
}
}
}
}
最佳答案
即使您写的内容似乎是正确的,但当RAC v3处于早期开发阶段时,这些Colin Eberhart的扩展还是在很早以前为RAC v2进行的。如今,它已经是候选版本,那么为什么不使用它呢?够用的。 Xcode将自动检测Signal
的类型
intSignal
|> filter { num in num % 2 == 0 }
|> map(toString)
|> observe(next: { string in println(string) })
README.md或Documentation folder中的更多信息