↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > deferってどう使う?金魚のフン制御構文

金魚のフン制御構文「defer」

先日サンプルコードを読んでいたらdeferという新しいワードが。Swift2から新しくでてきたGo言語でも 利用されているdeferという処理があるようですので解説です。これは処理の最後に何かを実施するJavaやC#でのtry..catch..finallyの finally部分と似た処理になります。つまるところエラーが発生しようが発生しまいが「処理のあとで何かしたい」時に利用する金魚のフンのような処理です。

サンプル画像

参考:Swift 2のdefer文
参考:The defer keyword in Swift 2: try/finally done right
参考:新しい制御構文の追加
参考:Swiftでdeinitまで処理をdeferする

やってみた

百聞は一見にしかずですのでやってみましょう。

関数の中で実行する


class ViewController: UIViewController {
    
    override func viewDidAppear(animated: Bool) {
        
        print("ステップ 1")
        testDefer()
        print("ステップ 4")    }
    
    
    func testDefer() {
        print("ステップ 2")
        defer { print("金魚のフンです") }
        print("ステップ 3")
    }

}

上の処理を実行すると、、、、以下のような結果に


ステップ 1
ステップ 2
ステップ 3
金魚のフンです
ステップ 4

上のソースコードならステップ2の後に実行されそうですが関数の最後まで処理してから 金魚の糞deferを実行しているのがわかります。

do の中でつかってみる


        print("ステップ 1")
        
        do {
            defer { print("金魚のフン") }
            print("ステップ 2")
            print("ステップ 3")
        }
        
        print("ステップ 4")
        

この場合はdoで囲った箇所の最後に実行。柔軟性がありますね!


ステップ 1
ステップ 2
ステップ 3
金魚のフンです
ステップ 4

for の中でつかってみる


        for i in 1...10 {
            print ("IN \(i)")
            defer { print ("金魚のフン \(i)") }
            print ("OUT \(i)")
        }
        

これなんかだと、、、、以下の様になります。


IN 1
OUT 1
金魚のフン 1
IN 2
OUT 2
金魚のフン 2
IN 3
OUT 3
金魚のフン 3
...
金魚のフン 9
IN 10
OUT 10
金魚のフン 10


いろいろ柔軟にも使えるようですので試してみてください!

まとめ

使えそうな制御構文です!Playgroundではdeferが確認できませんでしたので注意です。

↓こんな記事もありますよ!


2021-05-14 14:21:41

WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。

AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、 昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は...

2021-05-06 14:04:37

LINEのアニメーションスタンプ制作の落とし穴、、、失敗談

ゴールデンウィークにLINEスタンプを作成してみました。 作り切って申請も通したんですが、意図したアニメーションと違う、、、、 LINEクリエーターの画面だと、アニメーションのプレビュー...

2021-05-01 18:05:35

久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。

忘れないようにメモ エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。 ターゲット→ex...
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!