Rodhos Soft

備忘録を兼ねた技術的なメモです。Rofhos SoftではiOSアプリ開発を中心としてAndroid, Webサービス等の開発を承っております。まずはご相談下さい。

継続モナド

継続モナドはSwiftで段階的に作れる。

1. まず継続渡しの関数を作る。

func getA(complete:(String)->Void) {
    complete("X")
}

2. 継続渡しの関数を引数にとるクラスを作る。

typealias Func<T> = (T)->Void

public struct RDFuture<T> {
    
    public var f:(Func<T>)->()
    
    public func result(_ complete:(T) -> Void) -> Void {
        f(complete)
    }
    
    init(_ f:@escaping (Func<T>)->()) {
        self.f = f
    }
}

これで骨組みはできた。

このように使う

func test() {
    let f = RDFuture(getA)
    
    f.result {
        print($0)
    }
}

これに、bind的な実装をつけることになる。