13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swiftにはなぜprotectedがないの?

Last updated at Posted at 2016-01-27

古い記事だけど見逃してたので軽くまとめ
https://developer.apple.com/swift/blog/?id=11

protectedは実質的に何も保護していない

サブクラスは新しいpublicなproperty/methodを経由して、protectedなAPIを外部に公開できてしまう

Appleフレームワークはどうなの

Appleフレームワークにもサブクラスから呼び出されることを期待しているAPIがあるが、

  • サブクラス以外から呼んでも意味が無いAPI
  • 継承されるが直接呼び出されることは想定していないデザインのAPI (drawRectはUIKit以外から呼ばれない)
    というケースがほとんどで、その場合protectedがあると便利なことがあるか、というと特にない

extensionとの兼ね合い

protectedを導入すると、

  • クラスのextensionから、protectedなAPIは呼べるようにすべきか?
  • サブクラスのextensionから、スーパークラスのprotectedなAPIは呼べるようにすべきか?
    などの問題が発生し、複雑さが増してしまう。

わかりやすさ重視

swiftのアクセスコントロールは、

  • class外からのアクセス可能性
  • framework外からのアクセス可能性
    という軸のみでデザインされている。

ここに、さらに「継承関係」という新たな軸は追加したくない。ややこしくなるから。

swiftのアクセスコントロールは理解のしやすさを優先しており、
この設計がシンプルで実用上問題ないものと信じている

13
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?