🍀

SwiftのProtocolはデフォルト引数が指定できないのでメソッドのオーバーロードが良いんじゃない?という件

2022/01/19に公開

SwiftのProtocolのメソッドにはデフォルト引数が指定できないので、Optionalとかにしてやり過ごしがちなんじゃないかと思うんですが、オーバーロードしたら良いんじゃないの?という件です。

たとえばつぎのようにHogeのmethod1のクロージャを省略したかったりする場合、2つメソッドを作る。

protocol Hoge {
    // 本当はこういうふうにデフォルト引数を付けたいがプロトコルではそれができない
//    func method1(completion: () -> () = {})

    // 引数がないメソッドと
    func method1()
    // 引数があるメソッドを用意する
    func method1(completion: () -> ())
}

struct Fuga: Hoge {
    func method1() {
        // 実装側でデフォルト値を指定する
        method1(completion: {})
    }

    func method1(completion: () -> ()) {
        completion()
    }
}

どんなもんでしょうか?

Discussion