Objective-Cで書かれたThirdParty製のライブラリなどがあって、その中に含まれるクラスにメソッドを追加したいとします。

Objective-Cならカテゴリメソッド、Swiftならextensionを使います。

Objective-C

@interface ThridPartyClass (MyExtension) {
   - (void)myMethod;
}

Swift

extension ThridPartyClass {
  func myMethod() {
    // Do Something.
  }
}

ベースとなるThirdPartyClassがObjective-Cで書かれたものなら、Swiftのextensionは使わず、Objective-Cで書いたほうが良さそうです。なぜかというとextensionをpublicにすることができず、XCTestなど外部モジュールから読み出せないからです。

たとえばSwiftのextensionを以下のようにpublicにするとコンパイルエラーになります。

public extension ThridPartyClass {
  public func myMethod() {
    // Do Something.
  }
}

理由はThirdPartyClassはinternalであり、アクセスレベルが異なるpublicにはできないからです。もしかしたら、なにか裏技があるかもしれませんが、自分は上記理由によりObjective-Cで書かれたクラスの拡張はObjective-Cのカテゴリメソッドで行うことにしました。