kitoko552.memo

kitoko552のメモ

SwiftでrespondToSelectorを呼ぶ必要はない

要点

  • SwiftにはOptional ChainingがあるのでrespondToSelectorを呼んでチェックする必要はありません。
  • シンプルにhoge.delegate?.delegateMethod()と書くだけでいいです。

delegateを使った実装

Objective-C時代は、delegateを使ってある処理を他のクラスに委譲する実装が多くありました。
Swiftでは(というよりも流行的に)delegateをほとんど使わなくなりましたが、Objective-Cと共存しているプロジェクトの場合はSwiftでdelegateを使うこともあります。

Objective-Cでは

delegateメソッドを呼ぶ際、こんな感じで呼んでいました。

if ([hoge.delegate respondToSelector(delegateMethod)]) {
  [hoge.delegate delegateMethod];
}

respondToSelectorは、そのクラスが引数のメソッドを実装しているかどうかのBool値を返すメソッドです。
上の例の場合は、"hogeクラスがdelegateMethodメソッドを実装している場合、delegateMethodメソッドを実行する"となります。

しかしSwiftでは

上のようにrespondToSelectorでdelegateメソッドが実装されているかのチェックをする必要はありません。

hoge.delegate?.delegateMethod()

これだけで大丈夫です。
SwiftにはOptional Chainingがあるため、delegateMethodが実装されてない場合は何事もなかったかのように次の処理にうつります。
便利!

おわり