현재 스위프트 3.0.1 있다 액세스 4 단계 최저 (가장 제한)에 가장 높은 (최소 제한)에서 설명을.
1. open
그리고public
정의 모듈 (대상) 외부에서 엔티티를 사용할 수 있도록합니다. 일반적으로 프레임 워크에 공용 인터페이스를 지정할 때 사용 open
하거나 public
액세스합니다.
그러나 open
액세스는 클래스 및 클래스 멤버에만 적용public
되며 다음과 같이 액세스 와 다릅니다 .
public
클래스와 클래스 멤버는 정의 모듈 (대상) 내에서만 서브 클래스되고 재정의 될 수 있습니다.
open
클래스 및 클래스 멤버는 정의 모듈 (대상) 내외에서 서브 클래스 화 및 재정의 될 수 있습니다.
// 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
정의 모듈 (대상) 내에서 엔티티를 사용할 수 있도록합니다. 일반적으로 internal
앱 또는 프레임 워크의 내부 구조를 정의 할 때 액세스를 사용 합니다.
// First.framework – A.swift
internal struct A {}
// First.framework – B.swift
A() // ok
// Second.framework – C.swift
import First
A() // error: A is unavailable
삼. fileprivate
엔티티 사용을 정의 소스 파일로 제한합니다. 일반적으로 fileprivate
액세스를 사용 하여 세부 사항이 전체 파일 내에서 사용될 때 특정 기능의 구현 세부 사항을 숨 깁니다.
// 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
엔터티 사용을 엔 클로징 선언으로 제한합니다. 일반적으로 private
이러한 세부 사항이 단일 선언 내에서만 사용되는 경우 특정 기능의 구현 세부 사항을 숨기기 위해 액세스를 사용합니다.
// First.framework – A.swift
internal struct A {
private static let x: Int
internal static func doSomethingWithX() {
x // ok
}
}
A.x // error: x is unavailable