접근 제어는 다른 소스 파일과 모듈에서 코드 부분의 접근에 대해서 제한을 주는 기능이다. 특정 접근 수준을 개별 타입(클래스, 구조체 및 열거형) 뿐만 아니라 해당 타입에 속하는 프로퍼티, 메서드, 초기호 구문과 서브스크립트에 할당 가능하다.
스위프트는 코드 내에서 5개의 다른 접근 수준을 제공한다. 이 접근 수준은 소스파일과 관련되며 소스 파일이 속한 모듈과 관련된다.
스위프트에서 접근 수준은 전반적인 기본 원칙을 따른다. 컨텐츠는 더 낮은(더 제한적인) 접근 수준을 가진 다른 컨텐츠로 정의할 수 없다.
- public 변수는 internal, file-private, private으로 정의될 수 없다. 타입의 개념이 다르기 때문이다.
- 함수는 파라미터 타입과 반환 타입보다 더 높은 접근 수준을 가질 수 없다.
- 스위프트에서 모든 코드는 명시적으로 접근 수준을 지정하지 않는다면 internal의 기본 접근 수준을 가진다. 따라서 많은 경우 코드에서 명시적으로 접근 수준을 지정할 필요는 없다.
public class SomePublicClass{}
internal class SomeInternamClass{}
fileprivate class SomeFilePrivateClass{}
private class SomePrivateClass {}
//클래스에 대한 접근 수준을 정의할 수 있다.
public var somePublicVariable = 0
internal let someInteralConstant = 0
fileprivate func someFunction(){}
private func somePrivateFunction() {}
//다르게 지정하지 않는 한 기본적으로 internal 수준을 가진다.