カスタム型に対して明示的なアクセスレベルを指定したい場合には、型を定義する時点で指定します。アクセスレベルが許可する場所であれば、その新しい型を使用することができます。例えば、private クラスを定義する場合、その private クラスが定義されているソースファイル内で、プロパティの型や、関数のパラメータや戻り値の型としてのみ、そのクラスを使用することができます。
また、型のアクセス制御レベルは、その型のメンバ(プロパティ、メソッド、イニシャライザ、サブスクリプト)のデフォルトアクセスレベルにも影響があります。型のアクセスレベルを private として定義した場合、そのメンバのデフォルトアクセスレベルもまた private になります。型のアクセスレベルを internal または public として定義(あるいはアクセスレベルを明示的に指定せずにデフォルトアクセスレベルの internal を使用)した場合には、その型のメンバのデフォルトアクセスレベルは internal になります。
public class SomePublicClass { // 明示的な public クラス
public var somePublicProperty = 0 // 明示的な public クラスメンバ
var someInternalProperty = 0 // 暗黙的な internal クラスメンバ
private func somePrivateMethod() {} // 明示的な private クラスメンバ
}
class SomeInternalClass { // 暗黙的な internal クラス
var someInternalProperty = 0 // 暗黙的な internal クラスメンバ
private func somePrivateMethod() {} // 明示的な private クラスメンバ
}
private class SomePrivateClass { // 明示的な private クラス
var somePrivateProperty = 0 // 暗黙的な private クラスメンバ
func somePrivateMethod() {} // 暗黙的な private クラスメンバ
}
タプル型
タプル型のアクセスレベルは、そのタプルで使用されているすべての型で最も制限されているアクセスレベルになります。例えば、タプルを 2 つの異なる型、1 つを internal アクセス、もう 1 つを private アクセスで構成した場合、そのタプル型のアクセスレベルは private になります。
関数型
関数型のアクセスレベルは、関数のパラメータ型や戻り値の型で最も制限されているアクセスレベルに算定されます。算定された関数のアクセスレベルが文脈上のデフォルトにマッチしない場合には、関数の定義の一部として明示的にアクセスレベルを指定する必要があります。
次の例では、グローバル関数 someFunction
を定義し、関数自体にはアクセスレベルを指定していません。この関数がデフォルトアクセスレベルの internal になると期待するかもしれませんが、このケースではそうなりません。実際、someFunction
はコンパイルされません。
func someFunction() -> (SomeInternalClass, SomePrivateClass) {
// 関数の実装
}
関数の戻り値の型は、Custom Types で定義した 2 つの型で構成されたタプル型です。クラスの一方は internal として定義され、他方は private として定義されています。従って、タプル型全体のアクセスレベルは private(タプルを構成する型の最低のアクセスレベル)になります。
関数の戻り値の型が private であるため、関数宣言を有効にするには、private
を関数の全体のアクセスレベルに付ける必要があります。
private func someFunction() -> (SomeInternalClass, SomePrivateClass) {
// 関数の実装
}
関数の戻り値の型に private のクラスがあるため、someFunction
の定義に public
や internal
を付けることや、デフォルト設定の internal を使用することはできません。
列挙型
列挙型の個々のケースは、属している列挙型と同じアクセスレベルになります。個々の列挙型のケースに対して、異なるアクセスレベルを指定することはできません。
次の例では、列挙型 CompassPoint
に明示的なアクセスレベルの public を付けています。従って、列挙型のケース North
, South
, East
, West
のアクセスレベルもまた public になります。
public enum CompassPoint {
case North
case South
case East
case West
}
raw 値と関連値
列挙型の定義にある raw 値や関連値の型は、少なくとも列挙型のアクセスレベルと同じ高さのアクセスレベルになります。例えば、internal
アクセスレベルである列挙型の raw 値の型に、private
の型を使用することはできません。
ネストされた型
private の型にネストされた型は、自動的に private のアクセスレベルになります。public や internal の型にネストされた型は、自動的に internal のアクセスレベルになります。public の型にネストされた型を public にしたい場合には、ネストされた型を明示的に public として宣言する必要があります。
Portions of this page are translations based on work created and shared by Apple and used according to terms described in the Creative Commons Attribution 4.0 International License.