看到Colin Eberhart的pdfs浮出水面,他自己做了那些扩展。他曾写过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)
}
}
}
}
答案 0 :(得分:3)
即使你写的内容似乎是正确的,但是当RAC v3处于早期开发阶段时,那些Colin Eberhart的扩展是很久以前为RAC v2做出的。现在它已经是Release Candidate版本了,为什么不用呢?它非常方便。 Xcode会自动检测Signal
的类型
intSignal
|> filter { num in num % 2 == 0 }
|> map(toString)
|> observe(next: { string in println(string) })
中的更多信息