0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

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

    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
        関数名 {
        }
    }

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

以上。

0
3
1

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
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?