Kể từ Swift 3.0.1 , có 4 cấp độ truy cập , được mô tả bên dưới từ mức cao nhất (hạn chế thấp nhất) đến mức thấp nhất (hạn chế nhất).
1. openvàpublic
Cho phép một thực thể được sử dụng bên ngoài mô-đun xác định (mục tiêu). Bạn thường sử dụng openhoặc publictruy cập khi chỉ định giao diện chung cho khung.
Tuy nhiên, opentruy cập chỉ áp dụng cho các lớp và thành viên lớp và nó khác với publictruy cập như sau:
public các lớp và các thành viên lớp chỉ có thể được phân lớp và ghi đè trong mô đun xác định (đích).
open các lớp và các thành viên lớp có thể được phân lớp và ghi đè cả bên trong và bên ngoài mô đun xác định (đích).
// 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
Cho phép một thực thể được sử dụng trong mô-đun xác định (đích). Bạn thường sử dụng internalquyền truy cập khi xác định cấu trúc bên trong của ứng dụng hoặc khung.
// 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
Hạn chế việc sử dụng một thực thể đối với tệp nguồn xác định của nó. Bạn thường sử dụng fileprivatequyền truy cập để ẩn chi tiết triển khai của một phần chức năng cụ thể khi các chi tiết đó được sử dụng trong toàn bộ tệp.
// 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
Hạn chế việc sử dụng một thực thể để khai báo kèm theo. Bạn thường sử dụng privatequyền truy cập để ẩn chi tiết triển khai của một chức năng cụ thể khi các chi tiết đó chỉ được sử dụng trong một khai báo.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable