Swiftの型(Type)に定義したアクセス修飾子(Access Control Level)は、その型のメンバー(プロパティやメソッド、イニシャライザーなど)に影響する。
例えば、private修飾したclassのメンバーの暗黙的(デフォルト)アクセス制限はprivateである。
明示的publicクラス
1 2 3 4 5 6 |
public class SomePublicClass { public var somePublicProperty = 0 // 明示的publicクラスメンバー var someInternalProperty = 0 // 暗黙的internalクラスメンバー fileprivate func someFilePrivateMethod() {} // 明示的file-privateクラスメンバー private func somePrivateMethod() {} // 明示的privateクラスメンバー } |
注意
public typeはデフォルトでinternalのメンバーを持つ。publicではない。メンバーのアクセス制御をpublicにするときは、いかなるケースでも明示的にpublic修飾を記述する必要がある。
暗黙的internalクラス
1 2 3 4 5 |
class SomeInternalClass { var someInternalProperty = 0 // 暗黙的internalクラスメンバー fileprivate func someFilePrivateMethod() {} // 明示的file-privateクラスメンバー private func somePrivateMethod() {} // 明示的privateクラスメンバー } |
型(クラス)のデフォルトアクセスコントロールはinternal。したがって、その型(クラス)のメンバーのデフォルトアクセス制御もinternalとなる。
明示的fileprivateクラス
1 2 3 4 |
fileprivate class SomeFilePrivateClass { func someFilePrivateMethod() {} // 暗黙的file-privateクラスメンバー private func somePrivateMethod() {} // 明示的privateクラスメンバー } |
明示的にクラスにfileprivateを指定しているため、そのクラスのメンバーのアクセス制御もデフォルトではfile-privateとなる。もちろん明示的にprivateを指定したメンバーはprivateになる。
明示的privateクラス
1 2 3 |
private class SomePrivateClass { func somePrivateMethod() {} // 暗黙的privateクラスメンバー } |