Swift Language
액세스 제어
수색…
통사론
- 개인 수업 프로젝트
- let car = Car ( "Ford", 모델 : "Escape") // 기본 내부
- 공개 열거 장르
- 개인 함수 calculateMarketCap ()
- 내부 기능을 무시 setupView ()
- 개인 (설정) var 영역 = 0
비고
- 기본 비고 :
아래는 가장 높은 액세스 (최소 제한)에서 가장 낮은 액세스 (가장 제한적)까지의 세 가지 액세스 수준입니다.
공용 액세스는 모델 내의 모든 파일에서 클래스, 구조체, 변수 등을 액세스 할 수 있지만 외부 파일이 공용 액세스 코드가 포함 된 모듈을 가져 오는 경우 모듈 외부에서 더 중요합니다. 프레임 워크를 만들 때 공용 액세스를 사용하는 것이 일반적입니다.
내부 액세스는 엔터티의 모듈이있는 파일 만 엔터티를 사용할 수있게합니다. 모든 엔티티는 기본적으로 내부 액세스 레벨을 가지고 있습니다 (예외는 있음).
개인 액세스는 해당 파일 외부에서 엔티티가 사용되는 것을 방지합니다.
- 서브 클래 싱 비고 :
서브 클래스는 슈퍼 클래스보다 더 높은 액세스를 가질 수 없습니다.
- Getter & Setter 비고 :
속성의 설정자가 비공개 인 경우 getter는 내부입니다 (기본값). 또한 getter와 setter 모두에 대한 액세스 수준을 지정할 수 있습니다. 이 원칙은 또한 아래 첨자 에도 적용됩니다.
- 일반 비고 :
다른 엔티티 유형은 다음과 같습니다 : 초기화 프로그램, 프로토콜, 확장, 일반 및 유형 별명
구조체를 사용한 기본 예제
스위프트 3에는 여러 개의 액세스 수준이 있습니다. 이 예제에서는 open
제외하고 모두 사용합니다.
public struct Car {
public let make: String
let model: String //Optional keyword: will automatically be "internal"
private let fullName: String
fileprivate var otherName: String
public init(_ make: String, model: String) {
self.make = make
self.model = model
self.fullName = "\(make)\(model)"
self.otherName = "\(model) - \(make)"
}
}
myCar
가 다음과 같이 초기화되었다고 가정합니다.
let myCar = Car("Apple", model: "iCar")
Car.make (공개)
print(myCar.make)
이 인쇄물은 Car
를 가져 오는 대상을 포함하여 모든 곳에서 사용할 수 있습니다.
Car.model (내부)
print(myCar.model)
코드가 Car
와 동일한 타겟에 있으면 컴파일됩니다.
Car.otherName (fileprivate)
print(myCar.otherName)
코드가 Car
와 동일한 파일에있는 경우에만 작동합니다.
Car.fullName (비공개)
print(myCar.fullName)
Swift 3에서는 작동하지 않습니다. private
속성은 동일한 struct
/ class
내에서만 액세스 할 수 있습니다.
public struct Car {
public let make: String //public
let model: String //internal
private let fullName: String! //private
public init(_ make: String, model model: String) {
self.make = make
self.model = model
self.fullName = "\(make)\(model)"
}
}
엔티티에 연결된 액세스 수준이 여러 개있는 경우 Swift는 가장 낮은 액세스 수준을 찾습니다. 개인 변수가 공용 클래스에 있으면 변수는 여전히 개인으로 간주됩니다.
서브 클래 싱 예제
public class SuperClass {
private func secretMethod() {}
}
internal class SubClass: SuperClass {
override internal func secretMethod() {
super.secretMethod()
}
}
게터와 세터 예제
struct Square {
private(set) var area = 0
var side: Int = 0 {
didSet {
area = side*side
}
}
}
public struct Square {
public private(set) var area = 0
public var side: Int = 0 {
didSet {
area = side*side
}
}
public init() {}
}