2016-08-16 6 views
22

「非オープンクラスから継承することはできません」6私は今、その定義モジュール」は、Xcodeの8ベータ版の時点で迅速

クラスIの外に「非オープンクラス(クラス)から継承することはできません」コンパイルエラーを取得します継承することは別のスウィフトフレームワークの一部だったが、私のプロジェクトは、私は私のプロジェクトは、再び自分自身に答える見つかりましたか?

+2

関連:http://stackoverflow.com/questions/38947101/what-is-an-open-var-in-swift –

答えて

41

をコンパイルするために取得するように変更する必要がありますかどうXcodeの8のベータ5用にコンパイル。スウィフト3では

ましたpublicではなく、クラスをopenとマークすることができます。これにより、モジュール外のファイルでそのクラスをサブクラス化することができます。

単にopenを使用してモジュールクラスでpublicを交換してください。

リファレンスhere

+0

興味深い。私はこれについて知りませんでした。 – Alexander

+2

Xcode 8 beta 6リリースノートにも記載されています。 –

+0

はとてもうまく動作します!すばらしいです! –

16

あなたがopenの代わりpublicとして定義する必要がありますから継承したクラス。スイフト3のアクセス制御の変更に

もう少し文脈:

  • private

    スイフト2は、3つのアクセス・レベルを有していたエンティティのみ彼らは、ソースファイル内から入手可能です。定義された。

  • internal:実体は、定義が含まれ、モジュール全体にご利用いただけます。
  • public:エンティティは、APIとしての使用を意図しており、モジュールをインポートし、任意のファイルによってアクセスすることができます。

スイフト3は、2つの以上のアクセスレベル(openfileprivate)を添加し、privateの意味を変えている。

  • private:電流のみ宣言内のシンボルが見えます。
  • fileprivate:現在のファイル内にシンボルが表示されます。
  • internal:現在のモジュール内にシンボルが表示されています。
  • public:シンボルは現在のモジュールの外側に表示されます。
  • open:クラスまたは関数が現在のモジュールの外部でサブクラス化またはオーバーライドされるためです。
関連する問題