Swift의 'open' 키워드는 무엇입니까?
표준 라이브러리의 파일에는 228행 주위에 다음과 같은 코드 행이 포함되어 있습니다.
extension NSObject : Equatable, Hashable {
/// ...
open var hashValue: Int {
return hash
}
}
무엇인가.open var
이 문맥에서 의미하거나, 또는 무엇이open
키워드는요?
open
Swift 3의 새로운 액세스레벨로, 실장에 의해 도입되었습니다.
2016년 8월 7일부터 Swift 3 스냅샷과 Xcode 8 베타 6에서 사용할 수 있습니다.
요컨대:
- 안
open
class는 정의 모듈 외부에서 접근 및 서브클래스 할 수 있습니다.안open
클래스 멤버는 정의 모듈 외부에서 접근 및 덮어쓸 수 있습니다. - A
public
class는 액세스 가능하지만 정의 모듈 외부에서는 서브클래시 할 수 없습니다.apublic
클래스 멤버는 액세스 가능하지만 정의 모듈 외부에서는 덮어쓸 수 없습니다.
그렇게open
무엇이냐public
이전 Swift 릴리즈에 있었고public
가 제한되었습니다.또는 Chris Ratner가 SE-0177에서 말한 것처럼 퍼블릭 액세스와 퍼블릭 덮어쓰기 가능성을 구별합니다.
「오픈」은, 「퍼블릭보다 퍼블릭」이 되어, 매우 심플하고 깨끗한 모델을 제공하고 있습니다.
이 예에서는open var hashValue
액세스 할 수 있는 속성으로, 에서 덮어쓸 수 있습니다.NSObject
서브클래스
예시와 자세한 내용은 SE-0117을 참조하십시오.
열려 있는 이름
다른 모듈에서의 상속을 위해 개방하다
다른 모듈에서 상속을 위해 열기를 반복합니다.따라서 오픈클래스는 정의 모듈을 포함한 다른 모듈에서의 서브클래스를 위해 열려 있습니다.열린 변수 및 함수는 다른 모듈에서 재정의할 수 있도록 열려 있습니다.가장 제한이 적은 접근레벨입니다퍼블릭한 것이 다른 모듈에서 상속을 위해 닫혀 있다는 점을 제외하면 퍼블릭액세스와 동일합니다.
Apple Docs에서:
개방형 액세스는 클래스 및 클래스 구성원에만 적용되며 다음과 같이 공용 액세스와 다릅니다.
퍼블릭 액세스 또는 보다 제한적인 액세스레벨을 가진 클래스는 정의된 모듈 내에서만 하위 분류할 수 있습니다.
퍼블릭 액세스 또는 보다 제한적인 액세스레벨을 가진 클래스멤버는 정의된 모듈 내에서만 서브클래스에 의해 덮어쓸 수 있습니다.
오픈 클래스는 정의된 모듈 내 및 정의된 모듈을 Import하는 모듈 내에서 하위 분류할 수 있습니다.
오픈 클래스 멤버는 정의된 모듈 내의 서브클래스 및 정의된 모듈을 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
'source' 카테고리의 다른 글
"비원자"라는 성질이 무슨 뜻이죠? (0) | 2023.04.14 |
---|---|
SQL Server의 Group By, Having 및 Where 절 실행 시퀀스 (0) | 2023.04.14 |
선택 목록 열이 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 선택 목록에서 유효하지 않습니다. (0) | 2023.04.14 |
#pragma 마크의 의미는 무엇입니까?#pragma 마크가 필요한 이유는 무엇입니까? (0) | 2023.04.14 |
Objective-C 코드를 유닛 테스트하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.14 |