38

Xcode 8 ベータ 6 の時点で、定義モジュールの外部で「非オープン クラス (クラス) から継承できません」というコンパイル エラーが発生するようになりました。

継承元のクラスは別の Swift フレームワークの一部でしたが、プロジェクトは Xcode 8 beta 5 用にコンパイルされました。プロジェクトを再度コンパイルするには、何を変更する必要がありますか?

4

2 に答える 2

69

答えは自分で見つけました。

Swift 3 では、モジュールの外部にあるファイルがそのクラスをサブクラス化できるようにするopen代わりに、クラスをマークできるようになりました。public

publicモジュール クラスを に置き換えるだけopenです。

ここを参照してください。

于 2016-08-16T15:58:56.630 に答える
29

open継承元のクラスは、の代わりにとして定義する必要がありpublicます。

Swift 3 でのアクセス制御の変更について、もう少し詳しく説明します。

Swift 2 には 3 つのアクセス レベルしかありませんでした。

  • private: エンティティは、エンティティが定義されているソース ファイル内からのみ使用できます。
  • internal: エンティティは、定義を含むモジュール全体で使用できます。
  • public: エンティティは API として使用するためのものであり、モジュールをインポートする任意のファイルからアクセスできます。

Swift 3 では、さらに 2 つのアクセス レベル (openおよびfileprivate) が追加され、 の意味が変更されていprivateます。

  • private: 現在の宣言内でのみ表示されるシンボル。
  • fileprivate: 現在のファイル内で表示されるシンボル。
  • internal: 現在のモジュールまたは既定のアクセス修飾子内で表示されるシンボル。
  • public: 現在のモジュールの外に見えるシンボル。
  • open: クラスまたは関数が現在のモジュールの外でサブクラス化またはオーバーライドされる場合。
于 2016-08-22T06:57:08.780 に答える