Swiftで書いたProtocolをObjective-Cで使う予定があるなら、@objcをつけなければいけない。 つけなければ、Obj-C側で使えない。

@objc protocol Hoge {
  func get() -> Int
}

というHogeプロトコルがあったとき

class HogeService : NSObject {
  let hoge: Hoge
}

としたとき、HogeServiceのhogeをィールド利用しようとするとコンパイルエラーになる。 そもそもヘッダファイルに書き出されない。

単にちゃんとドキュメントを読んでいなくてハマっただけといえばそれだけである。

類似したもので、Swiftで書いたクラスはNSObjectを継承していないとObjective-Cで使えないなどある。

参考文献