1. ホーム
  2. swift

[解決済み] Swiftの'open'キーワードは何ですか?

2022-03-14 17:10:24

質問

その ObjectiveC.swift ファイルには、標準ライブラリの228行目あたりに次のような数行のコードが含まれています。

extension NSObject : Equatable, Hashable {
  /// ...
  open var hashValue: Int {
    return hash
  }
}

とは何ですか? open var はこの文脈で何を意味するのか、あるいは open というキーワードがありますが、一般的にはどうなのでしょうか?

どのように解決するのですか?

open は Swift 3 で実装された新しいアクセスレベルです。 の

2016年8月7日からのSwift 3スナップショットで利用可能です。 およびXcode 8 beta 6で使用できます。

要するに

  • An open クラスは アクセス可能 サブクラス化可能 の外側で を定義するモジュールです。また open クラスのメンバは アクセス可能 オーバーライド可能 を定義するモジュールの外側に置く。
  • A public クラスは アクセス可能 しかし サブクラス化できない の外側で を定義するモジュールです。A public クラスメンバは アクセス可能 しかし オーバーライド不可 定義されたモジュールの外側で

そこで open は何ですか public 以前の Swiftのリリースと public が制限されました。 あるいは、Chris Lattnerが言うように SE-0177 公開アクセスと公開オーバーライド可能を区別できるようにする :

"open "は単に "more public than public "となり、非常にシンプルでクリーンなモデルを提供するようになりました。

あなたの例では open var hashValue は、アクセス可能なプロパティで、オーバーライドすることができます。 NSObject のサブクラスがあります。

その他の例や詳細については、以下のサイトをご覧ください。 SE-0117 .