ReactiveCocoa 3.0的mapAs,filterAs,subscribeNextAs

时间:2015-07-26 21:56:52

标签: ios reactive-cocoa reactive-cocoa-3

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


}

1 个答案:

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

README.mdDocumentation folder

中的更多信息