Swiftで、performSelector:withObject:がない!!國居貴浩氏のiPhoneアプリ開発のコツとツボ35のサンプルを、Swiftで書き換えることを試みています。ターゲット/アクションデザインパターの実装」のサンプルを書き換えようとしました。ところが、Swiftでは、performSelector:withObject:メソッドがないんですね。メモリーリークを起こすことがあるとかで廃止になったようです。swift?が引っかかりました。dispatch_afterを使って遅延実行を行うといいようです。参考にして実装してみました。UIColor.blackColor()}これでうまくいきました。ターゲット/アクションデザインパターンで色パレットを作る」の実装をやろうとすると、上の方法ではうまくいきません。push:メソッドは、Buttonインスタンスを引数に取るからです。Swift?にヒントがあり、アクションメソッドが引数を持つ場合は、dispatch_afterとNSThreadのdetachNewThreadSelectorを使うといいようです。Swiftでは、performSelector:withObjectが使えないので、dispatch_afterを使用。Buttonクラスは、AppDelegateクラスの詳細(push:のこと)を知らない。AppDelegateにキャストして、引数に入れるのがキモです。この実装方法にたどり着くまで、Buttonクラスは、AppDeleagteクラスのpushメソッドの引数のことをどうやって知るのだろうと疑問に思っていました。参考にすると、anObjectをAppDelegateにキャストすると、Buttonクラスで、AppDelegateクラスにあるpush:メソッドを呼ぶことはできます。これはButtonクラスがAppDelegateクラスの実装に依存するので、アカンやつです。替わりに、ここで採用した実装方法だと、Buttonクラスは、AppDelegateクラスの詳細な実装、push:メソッドのことを知らないので、ターゲット/アクションデザインパターンになっています。