山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

SwiftでPromiseパターン

スマホアプリ開発では非同期処理が多いのでコールバックが多くなります。Swiftにはクロージャがあるのである程度は大丈夫です。しかし非同期処理を複数続けたり結果によって違うコールバックを呼ぶようになってきたりするとあちこち飛んだり戻ったりしてソースの解読がどんどん困難になっていきます。

api.call(param1,param2,param3,
    callback1:{(value) -> Void in
        api2.call(param1,param2,param3,
            callback1:{(value) -> Void in
                //success
            },
            callback2:{(value) -> Void in
                //user error
            },
            callback3:{(value) -> Void in
                //system error
            }
        }
    },
    callback2:{(value) -> Void in
        //other case
    }
)

これをわかりやすくするためにPromiseパターンというものがあります。(〜).then(〜).then(〜)といった形で非同期処理とコールバックを順々につなげて書けるパターンです。

api.call(param1,param2,param3).then({(value) -> Void in
    return api2.call(param1,param2,param3)
}).then({(value) -> Void in
    //success
}).error({value) -> Void in
    //error
})

JavaだとRxJavaを使うとこういった書き方ができます。Swiftでもできないかな、と思って調べたらありました。llcc.hatenablog.com

導入を検討してみたいと思います。