Począwszy od wersji Swift 3.0.1 , istnieją 4 poziomy dostępu , opisane poniżej, od najwyższego (najmniej restrykcyjnego) do najniższego (najbardziej restrykcyjnego).
1. openipublic
Włącz encję do użycia poza modułem definiującym (docelowym). Zazwyczaj używasz openlub publicuzyskujesz dostęp przy określaniu publicznego interfejsu do frameworka.
Jednak opendostęp dotyczy tylko klas i członków klasy i różni się od publicdostępu w następujący sposób:
public klasy i członkowie klasy mogą być podklasowane i zastępowane tylko w module definiującym (docelowym).
open klasy i elementy klasy mogą być podklasowane i zastępowane zarówno w module definiującym, jak i poza nim (cel).
// First.framework – A.swift
open class A {}
// First.framework – B.swift
public class B: A {} // ok
// Second.framework – C.swift
import First
internal class C: A {} // ok
// Second.framework – D.swift
import First
internal class D: B {} // error: B cannot be subclassed
2) internal
Umożliwia użycie encji w module definiującym (docelowym). Zwykle używasz internaldostępu podczas definiowania wewnętrznej struktury aplikacji lub frameworka.
// First.framework – A.swift
internal struct A {}
// First.framework – B.swift
A() // ok
// Second.framework – C.swift
import First
A() // error: A is unavailable
3) fileprivate
Ogranicza użycie encji do jej pliku źródłowego definiującego. Zwykle używasz fileprivatedostępu, aby ukryć szczegóły implementacji określonego elementu funkcjonalności, gdy są one używane w całym pliku.
// First.framework – A.swift
internal struct A {
fileprivate static let x: Int
}
A.x // ok
// First.framework – B.swift
A.x // error: x is not available
4 private
Ogranicza użycie encji do jej załączonej deklaracji. Zwykle używasz privatedostępu, aby ukryć szczegóły implementacji określonego elementu funkcjonalności, gdy szczegóły te są używane tylko w ramach jednej deklaracji.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable