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. open
ipublic
Włącz encję do użycia poza modułem definiującym (docelowym). Zazwyczaj używasz open
lub public
uzyskujesz dostęp przy określaniu publicznego interfejsu do frameworka.
Jednak open
dostęp dotyczy tylko klas i członków klasy i różni się od public
dostę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 internal
dostę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 fileprivate
dostę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 private
dostę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