swiftの5つの修飾子
Swift言語において、修飾子(アクセス修飾子)はクラス、構造体、列挙体、プロパティ、メソッド、イニシャライザ、変数などのアクセスレベルを制御するために使用されます。以下は、Swiftで使用できる5つの主要な修飾子です:
open(最も開かれたアクセス):
どのモジュールからでもアクセス可能。
サブクラス化やオーバーライドが可能。
public:
どのモジュールからでもアクセス可能。
サブクラス化やオーバーライドが可能。
internal:
同一モジュール内からのみアクセス可能。
モジュール外からはアクセス不可。
fileprivate:
同一ファイル内からのみアクセス可能。
ファイル外からはアクセス不可。
private(最も制約のあるアクセス):
同一定義スコープ内からのみアクセス可能。
同一ファイル内でも別の型の拡張や定義ではアクセス不可。
これらの修飾子は、コード内のエンティティ(クラス、メソッド、プロパティなど)に対してアクセスの範囲を制御します。
例えば、特定のクラスを他のモジュールから利用できるようにしたい場合は、public修飾子を使用します。
逆に、特定のメソッドを同一モジュール内でのみ利用可能にする場合は、internal修飾子を使用します。
Swiftでopen、public、internal、fileprivate、privateの記載例
Swift言語におけるアクセス修飾子の例を以下に示します。
以下の例では、それぞれの修飾子がどのように使用されるかを示しています。
// クラスの例 open class OpenClass { open var openProperty: Int = 0 public var publicProperty: Int = 0 internal var internalProperty: Int = 0 fileprivate var filePrivateProperty: Int = 0 private var privateProperty: Int = 0 open func openMethod() {} public func publicMethod() {} internal func internalMethod() {} fileprivate func filePrivateMethod() {} private func privateMethod() {} } // 列挙体の例 public enum PublicEnum { case caseOne case caseTwo } // 構造体の例 internal struct InternalStruct { var internalProperty: Int } // プロトコルの例 fileprivate protocol FilePrivateProtocol { func filePrivateMethod() } // 拡張の例 private extension OpenClass { func privateExtensionMethod() {} } // 変数の例 open var openVariable: Int = 0 public var publicVariable: Int = 0 internal var internalVariable: Int = 0 fileprivate var filePrivateVariable: Int = 0 private var privateVariable: Int = 0
上記の例では、クラス、列挙体、構造体、プロトコル、拡張、変数などの様々なエンティティに対してそれぞれの修飾子がどのように適用されるかが示されています。
修飾子は、エンティティのアクセス範囲を制御し、コードの可読性と保守性を向上させるのに役立ちます。