search
LoginSignup
3

posted at

Swiftで特定のメソッドをClosureにしたくなった時

例えば以下のような関数があったとします。

    func 関数名() {
        長い処理
    }

このメソッドを使い回した時に特定の箇所ではUI処理が終わるまで待機する必要が出てきた時などに

    func 関数名(comp: (() -> Void)? = nil) {
        長い処理

        // comp!()にすると呼び出さない場合にクラッシュする(後述)
        comp?()
    }

呼び出し方

    override func viewDidLoad() {
        // 待つ必要がない場合
        // comp!()にしてるとここでクラッシュ
        関数名()

        // 待ちたい時
        関数名 {
          //待った後に行いたい処理
        }
    }

もし以下のような形で書くと

    func 関数名(comp: () -> Void) {

    }

呼び出し元は明示的にClousreの処理を記述しなければならないです。

    override func viewDidLoad() {
        // 待つ必要がない場合
        // build error
        関数名() //Missing argument for parameter 'comp' in call

        // 待ちたい時
        // build success
        関数名 {
        }
    }

ここは処理によって臨機応変に使い分けていきたいです。

以上。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3