ReactiveCocoa 3.0 的 mapAs、filterAs、subscribeNextAs
mapAs, filterAs, subscribeNextAs for ReactiveCocoa 3.0
在四处流传的 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)
}
}
}
}
尽管您写的似乎是正确的,但 Colin Eberhart 的那些扩展是很久以前为 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 or Documentation folder
在四处流传的 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)
}
}
}
}
尽管您写的似乎是正确的,但 Colin Eberhart 的那些扩展是很久以前为 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 or Documentation folder