1

在 Colin Eberhart 的 pdf 中看到他自己做了这些扩展。他在 Swift 中写过 subscribeNextAs,但没有写过其他任何一个。

下面是正确的吗?

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


}
4

1 回答 1

3

尽管您写的似乎是正确的,但 Colin Eberhart 的那些扩展是很久以前为 RAC v2 制作的,当时 RAC v3 处于早期开发阶段。现在它已经是一个候选版本,那么为什么不使用它呢?它足够方便。Xcode 会自动检测Signal's type

intSignal
    |> filter { num in num % 2 == 0 }
    |> map(toString)
    |> observe(next: { string in println(string) })

README.md文档文件夹中的更多信息

于 2015-07-27T07:14:37.057 回答