Xcode 8 ベータ 6 の時点で、定義モジュールの外部で「非オープン クラス (クラス) から継承できません」というコンパイル エラーが発生するようになりました。
継承元のクラスは別の Swift フレームワークの一部でしたが、プロジェクトは Xcode 8 beta 5 用にコンパイルされました。プロジェクトを再度コンパイルするには、何を変更する必要がありますか?
Xcode 8 ベータ 6 の時点で、定義モジュールの外部で「非オープン クラス (クラス) から継承できません」というコンパイル エラーが発生するようになりました。
継承元のクラスは別の Swift フレームワークの一部でしたが、プロジェクトは Xcode 8 beta 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
: クラスまたは関数が現在のモジュールの外でサブクラス化またはオーバーライドされる場合。