Protocol内にアクセス修飾子は不要


public protocol SomeProtocol: class {
   public func someMethod()
}

と記述したら、
"'public' modifier cannot be used in protocols"
とエラーが。

class や struct の定義には、モジュール外に公開するものには逐一 public を指定する必要があるが、protocol はそうではないのであった。

公式ドキュメントにはこのあたりの仕様について記述が見当たらなかったが、以下のフォーラムに納得のいく回答があった。

Internal Protocol Property |Apple Developer Forums

You can’t approach it this way, because your public protocol makes all of its requirements (including “method”) visible publicly, and therefore accessible publicly. You cannot restrict access other than via visibility.

普段のアプリ開発ではあまり意識することのなかった public 修飾子だが、近頃自作 Framework を CocoaPods で公開したことをきっかけに、あらためて勉強する必要に迫られている。

ちなみに、公開した Framework のソースコードは以下。勉強ついでかつ自分用ということもあり README すらなおざりだが、気が乗り次第きちんと整えたい、と思う。

p0dee/PDEMenuControl

コメントを残す