Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

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

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が確認できませんでしたので注意です。

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

Facebook SDKを試してみる#3(再調査)

SDKのインストーラが起動しても結局frameworkをドラッグドロップしなちゃ追加できない、面倒臭い、と発言してしまったのですが、 どうやらSDKをインストーラにてインストールした場合(SDK4.1)は、importするだけでどうやらSDKが追加できるとかなんとか。

UISlider

横バーをぐりぐり移動させて値変更させるコントロールです。

AppleWatchアプリの申請

AppleWatchアプリの申請が4月1日から始まりましたので、少しトライしてみました。ハマった箇所を共有です。 アプリをArchiveしてValidateしてから2パターンの不具合、あとはアップロードには成功したのですが、Itunesに反映されなかった 現象を共有です
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!