Xcode 8ベータ6の時点で、コンパイルモジュール「定義モジュール外の非オープンクラス(クラス)から継承できません」が表示されます。
私が継承していたクラスは、別のSwiftフレームワークの一部でしたが、プロジェクトはXcode 8ベータ5用にコンパイルされました。プロジェクトを再度コンパイルするには、何を変更する必要がありますか?
自分で答えを見つけました。
Swift 3では、クラスをopen
の代わりにpublic
としてマークできるようになりました。これにより、モジュール外のファイルがそのクラスをサブクラス化できます。
モジュールクラスのpublic
をopen
に置き換えるだけです。
参照 ここ 。
継承元のクラスは、open
ではなくpublic
として定義する必要があります。
Swift 3:のアクセス制御の変更に関するもう少しのコンテキスト:
Swift 2には3つのアクセスレベルしかありませんでした。
private
:エンティティは、定義されているソースファイル内からのみ使用できます。internal
:定義を含むモジュール全体でエンティティを使用できます。public
:エンティティはAPIとして使用するためのもので、モジュールをインポートする任意のファイルからアクセスできます。Swift 3はさらに2つのアクセスレベル(open
とfileprivate
)を追加し、private
の意味を変更しています:
private
:現在の宣言内でのみ表示されるシンボル。fileprivate
:現在のファイル内で見えるシンボル。internal
:現在のモジュール内で見えるシンボル。public
:現在のモジュールの外部から見えるシンボル。open
:現在のモジュールの外部でサブクラス化またはオーバーライドされるクラスまたは関数用。