Pada Swift 3.0.1 , ada 4 tingkat akses , dijelaskan di bawah ini dari yang tertinggi (paling ketat) hingga terendah (paling ketat).
1. opendanpublic
Aktifkan entitas untuk digunakan di luar modul penentu (target). Anda biasanya menggunakan openatau publicmengakses ketika menentukan antarmuka publik untuk suatu kerangka kerja.
Namun, openakses hanya berlaku untuk kelas dan anggota kelas , dan itu berbeda dari publicakses 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 internalakses 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 privateakses 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