source

Swift의 'open' 키워드는 무엇입니까?

factcode 2023. 4. 14. 22:12
반응형

Swift의 'open' 키워드는 무엇입니까?

표준 라이브러리의 파일에는 228행 주위에 다음과 같은 코드 행이 포함되어 있습니다.

extension NSObject : Equatable, Hashable {
  /// ...
  open var hashValue: Int {
    return hash
  }
}

무엇인가.open var이 문맥에서 의미하거나, 또는 무엇이open키워드는요?

openSwift 3의 새로운 액세스레벨로, 실장에 의해 도입되었습니다.

2016년 8월 7일부터 Swift 3 스냅샷과 Xcode 8 베타 6에서 사용할 수 있습니다.

요컨대:

  • openclass는 정의 모듈 외부에서 접근서브클래스 할 수 있습니다.open클래스 멤버는 정의 모듈 외부에서 접근 및 덮어쓸 있습니다.
  • A publicclass는 액세스 가능하지만 정의 모듈 외부에서는 서브클래시 할 수 없습니다.apublic클래스 멤버는 액세스 가능하지만 정의 모듈 외부에서는 덮어쓸 수 없습니다.

그렇게open무엇이냐public이전 Swift 릴리즈에 있었고public가 제한되었습니다.또는 Chris Ratner가 SE-0177에서 말한 처럼 퍼블릭 액세스와 퍼블릭 덮어쓰기 가능성을 구별합니다.

「오픈」은, 「퍼블릭보다 퍼블릭」이 되어, 매우 심플하고 깨끗한 모델을 제공하고 있습니다.

이 예에서는open var hashValue액세스 할 수 있는 속성으로, 에서 덮어쓸 수 있습니다.NSObject서브클래스

예시와 자세한 내용은 SE-0117을 참조하십시오.

열려 있는 이름

다른 모듈에서의 상속을 위해 개방하다

다른 모듈에서 상속을 위해 열기를 반복합니다.따라서 오픈클래스는 정의 모듈을 포함한 다른 모듈에서의 서브클래스를 위해 열려 있습니다.열린 변수 및 함수는 다른 모듈에서 재정의할 수 있도록 열려 있습니다.가장 제한이 적은 접근레벨입니다퍼블릭한 것이 다른 모듈에서 상속을 위해 닫혀 있다는 점을 제외하면 퍼블릭액세스와 동일합니다.

Apple Docs에서:

개방형 액세스는 클래스 및 클래스 구성원에만 적용되며 다음과 같이 공용 액세스와 다릅니다.

  1. 퍼블릭 액세스 또는 보다 제한적인 액세스레벨을 가진 클래스는 정의된 모듈 내에서만 하위 분류할 수 있습니다.

  2. 퍼블릭 액세스 또는 보다 제한적인 액세스레벨을 가진 클래스멤버는 정의된 모듈 내에서만 서브클래스에 의해 덮어쓸 수 있습니다.

  3. 오픈 클래스는 정의된 모듈 내 및 정의된 모듈을 Import하는 모듈 내에서 하위 분류할 수 있습니다.

  4. 오픈 클래스 멤버는 정의된 모듈 내의 서브클래스 및 정의된 모듈을 Import하는 모듈 내의 서브클래스에 의해 덮어쓸 수 있습니다.

Open은 액세스레벨로 Swift에서 클래스 상속을 제한하기 위해 도입되었습니다.

, 오픈액세스 레벨을 적용할 수 있는 것은 클래스클래스 멤버뿐입니다.

수업 중

오픈 클래스는 정의된 모듈 및 클래스가 정의된 모듈을 Import하는 모듈에서 서브클래스를 만들 수 있습니다.

인클래스 멤버

클래스 멤버에게도 마찬가지입니다.오픈 메서드는 정의된 모듈 및 메서드가 정의된 모듈을 Import하는 모듈 내의 서브클래스에 의해 덮어쓸 수 있습니다.

이 업데이트의 필요성

라이브러리 및 프레임워크의 일부 클래스는 하위 클래스로 설계되지 않았으며, 그렇게 하면 예기치 않은 동작이 발생할 수 있습니다.네이티브 Apple 라이브러리에서는 동일한 메서드와 클래스를 덮어쓸 수 없습니다.

따라서 이 추가 후 퍼블릭액세스 레벨과 프라이빗액세스 레벨을 적절히 적용합니다.

상세한 것에 대하여는, 액세스 제어에 관한 Apple 문서를 참조해 주세요.

open come은 여러 모듈을 다룰 때 재생됩니다.

open class는 정의 모듈 외부에서 접근 및 서브클래스가 가능합니다.오픈 클래스 멤버는 정의 모듈 외부에서 접근 및 덮어쓸 수 있습니다.

open은 다른 모듈에만 해당됩니다.예를 들어 코코아 팟 또는 유닛 테스트, 상속 또는 덮어쓸 수 있습니다.

언급URL : https://stackoverflow.com/questions/38947101/what-is-the-open-keyword-in-swift

반응형