Okogeki'sブログ

デキるエンジニアを目指すOkogekiのブログ

Swiftでコールバックはどう書くか

業務ではObjective-C中心でソースを書いていますが、
いつか移行すべき日に備え、Swiftの学習も進めています。
今回はSwiftのお話。

Objective-CでBlockによるコールバックを書く事がありますが、
Swiftだとどんな感じで書くのか調べてみました。
Objective-Cだと自分はtypedefを使ってソースの整形をしてたので、
Swiftでも同様の事をします。

注意

swiftは不慣れなのでミスがあるかもしれません。何かございましたらご指摘して頂ければ幸いです。

import UIKit

typealias CompletionBlock = (result : NSString) -> ()

class ViewController: UIViewController {
    
    override func viewDidLoad() {
      
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        var name: NSString;
        name = "okogeki";
        
        callBackTest(name,
            success:{(str : NSString) in
                println(str);
            },
            fail: {(str : NSString) in
                println(str);
            },
            error: {(str : NSString) in
                println(str);
            }
        );
        
    }
    
    func callBackTest(var id:NSString,var success:CompletionBlock?,var fail:CompletionBlock?, var error:CompletionBlock?){
        
        var testStr: String;
        testStr = "one:"+id;

        if(success != nil){
            success!(result:testStr);
            success = nil;
        }
        
        if(fail != nil){
            testStr = "two:"+id;
            fail!(result: testStr);
            fail = nil;
        }
        
        if(error != nil){
            testStr = "three:"+id;
            error!(result: testStr);
            error = nil;
        }
        
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    

}


Optional 型とから非Optional 型へのアンラップに"!"を使うのがまだ慣れません。何となく気持ち悪い感じがします笑

P.S はてな記法SwiftObjective-Cを上手くみせるにはどうしたらいいんでしょうか・・・。rubyとかは用意されているのですが。