Open1

Swift: protectedがない件

kabeyakabeya

Swiftのアクセス権は、private/file privateとinternalだけでprotectedがありません。

https://qiita.com/kenmaz/items/d3d48971bb3c78f49dfa

WatchConnectivityをSwift Concurrencyでasync化する、ってなったとして、WatchConnectivityManagerみたいなものを作って、iOS版とwatchOS版でそれぞれ派生クラスを作るとか、あるいはアプリごとに派生クラスを作るって考えたときに、onMessageのようなところをそれぞれでオーバライドしたいわけです。

といって、外部のクラスからonMessageのようなところは見えて欲しくない。

そうなるとなぜprotectedがないのか…あるべきじゃないのかって思ってたんですよね。

ただ、よくよく考えると、onMessageのようなところはdelegate(あるいはメッセージハンドラ)のprotocolを定義して、delegateのそのメソッドに処理させる、というのがよいのでしょうね。

派生クラスを作ると他にも継承したい機能とか出てきて多重継承?みたいな問題も出てきますし。
(ふた昔前ぐらいは派生クラス地獄みたいな感じのことがよくありました)
実際うえに書いた話でも、iOS/watchOSで派生クラスを作るという話と、アプリごとに派生クラスを作るという話とがあるんですよね。

delegateのほうはprotocolなので、継承とかありません。
やっぱりprotectedはなくても良さそうです。