수색…


통사론

  • 개인 수업 프로젝트
  • let car = Car ( "Ford", 모델 : "Escape") // 기본 내부
  • 공개 열거 장르
  • 개인 함수 calculateMarketCap ()
  • 내부 기능을 무시 setupView ()
  • 개인 (설정) var 영역 = 0

비고

  1. 기본 비고 :

아래는 가장 높은 액세스 (최소 제한)에서 가장 낮은 액세스 (가장 제한적)까지의 세 가지 액세스 수준입니다.

공용 액세스는 모델 내의 모든 파일에서 클래스, 구조체, 변수 등을 액세스 할 수 있지만 외부 파일이 공용 액세스 코드가 포함 된 모듈을 가져 오는 경우 모듈 외부에서 더 중요합니다. 프레임 워크를 만들 때 공용 액세스를 사용하는 것이 일반적입니다.

내부 액세스는 엔터티의 모듈이있는 파일 만 엔터티를 사용할 수있게합니다. 모든 엔티티는 기본적으로 내부 액세스 레벨을 가지고 있습니다 (예외는 있음).

개인 액세스는 해당 파일 외부에서 엔티티가 사용되는 것을 방지합니다.

  1. 서브 클래 싱 비고 :

서브 클래스는 슈퍼 클래스보다 더 높은 액세스를 가질 수 없습니다.

  1. Getter & Setter 비고 :

속성의 설정자가 비공개 인 경우 getter는 내부입니다 (기본값). 또한 getter와 setter 모두에 대한 액세스 수준을 지정할 수 있습니다. 이 원칙은 또한 아래 첨자 에도 적용됩니다.

  1. 일반 비고 :

다른 엔티티 유형은 다음과 같습니다 : 초기화 프로그램, 프로토콜, 확장, 일반 및 유형 별명

구조체를 사용한 기본 예제

3.0

스위프트 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() {}
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow