Pada Swift 3.0.1 , ada 4 tingkat akses , dijelaskan di bawah ini dari yang tertinggi (paling ketat) hingga terendah (paling ketat).
1. open
danpublic
Aktifkan entitas untuk digunakan di luar modul penentu (target). Anda biasanya menggunakan open
atau public
mengakses ketika menentukan antarmuka publik untuk suatu kerangka kerja.
Namun, open
akses hanya berlaku untuk kelas dan anggota kelas , dan itu berbeda dari public
akses sebagai berikut:
public
kelas dan anggota kelas hanya dapat disubklasifikasikan dan diganti dalam modul pendefinisian (target).
open
kelas dan anggota kelas dapat disubklasifikasikan dan diganti baik di dalam maupun di luar modul (target).
// 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
Memungkinkan entitas untuk digunakan dalam modul yang menentukan (target). Anda biasanya menggunakan internal
akses saat mendefinisikan struktur internal aplikasi atau kerangka kerja.
// 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
Membatasi penggunaan entitas untuk file sumber yang menentukan. Anda biasanya menggunakanfileprivate
akses untuk menyembunyikan detail implementasi dari bagian fungsionalitas tertentu ketika detail itu digunakan dalam seluruh file.
// 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
Membatasi penggunaan suatu entitas pada deklarasi terlampir. Anda biasanya menggunakan private
akses untuk menyembunyikan detail implementasi dari bagian fungsionalitas tertentu ketika detail tersebut hanya digunakan dalam satu deklarasi.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable