次のように start でコールバック関数を渡して、処理が終わったらコールバック関数を実行したいです。

func callAPI() {
    SomeAPI().start(someAPICompleted)
}

func someAPICompleted(api: SomeAPI) {
    // SomeAPI終了時の処理
}

上記の SomeAPI のようなクラスを複数作りたいので、共通処理は親クラスの AbstractAPI に書いています。

class AbstractAPI {

    var caller: (()->())?

    init() {}

    func start<T: AbstractAPI>(callBack:(T)->()) {
        caller = {[unowned self]()->() in 
            callBack(self as T)
        }
        // 処理開始...
    }

    // 処理完了後に呼ばれる
    func completed() {
        caller?()
    }
}

completed() でコールバックを実行しなければいけないので、start でコールバックをインスタンス変数に入れようと思ったんですが、変数の型をどうすればいいか分からず上記のようにクロージャーで包んで保持しています。

しかしこの書き方は冗長なので、できれば改めたいです。

最初Any型の変数にコールバック関数を保持しようと思ったんですが、Any型の変数を()で実行するとコンパイルエラーになりました。

let f: Any = {println("Hello")}
f()

※f()でコンパイルエラーになる

もう少しスマートなやり方はないでしょうか?