프로토콜이 특정 클래스에서만 채택되도록 요구하는 방법
이 프로토콜을 원합니다.
protocol AddsMoreCommands {
/* ... */
}
그 계급으로부터 물려받은 계급에 의해서만 입양됩니다.UIViewController
. 이 페이지는 클래스에서 채택된 것(구조가 아닌)만 쓰기로 지정할 수 있음을 알려줍니다.
protocol AddsMoreCommands: class {
}
특정 계층에서만 채택하도록 요구하는 방법을 알 수 없습니다.해당 페이지는 나중에 추가에 대해 설명합니다.where
적합성을 확인하기 위해 프로토콜 확장에 대한 조항들이 있지만 나는 그것을 어떻게 조정해야 하는지 또한 알 수 없습니다.
extension AddsMoreCommands where /* what */ {
}
이것을 할 방법이 방법이 있습니까?감사합니다!
protocol AddsMoreCommands: class {
// Code
}
extension AddsMoreCommands where Self: UIViewController {
// Code
}
이는 확장 없이도 달성할 수 있습니다.
protocol AddsMoreCommands: UIViewController {
// code
}
이는 다음과 정확히 동일합니다.
protocol AddsMoreCommands where Self: UIViewController {
// code
}
저는 보통 첫번째 옵션을 사용하는데, 얼마전에 스위프트 문서에서 읽었던 IIRC는 제약 조건이 다음과 같은 경우에 권장되는 방법입니다.Self
, if is 다른 제약 조건은 다음과 같습니다.where
사용할 수 있습니다.
그 이후로 주목할 것.UIViewController
가class
또한, 이 프로토콜은 대리인과 같은 약한 속성에 대해 구현될 수 있습니다.
편집 2021/01/05: 이전에 게시된 솔루션에 경고가 있었습니다. 삭제하고 경고가 발생하지 않는 이 솔루션을 사용합니다.
이전 답변에서 문제가 생겨 이 선언을 하게 되었습니다.
protocol AddsMoreCommands where Self : UIViewController {
// protocol stuff here
}
Xcode 9.1에서 경고 없음
Swift 5에서는 다음을 통해 이를 실현할 수 있습니다.
protocol AddsMoreCommands: UIViewController {
/* ... */
}
아주 편리합니다.
언급URL : https://stackoverflow.com/questions/35133887/how-to-require-that-a-protocol-can-only-be-adopted-by-a-specific-class
'programing' 카테고리의 다른 글
MariaDB 도커 이미지 빌드 실패 (0) | 2023.09.08 |
---|---|
PowerShell의 첫 번째부터 두 번째 끝까지 배열 인덱스 (0) | 2023.09.08 |
부트스트랩 팝업에 형태가 포함되어 있습니까? (0) | 2023.09.08 |
해시 테이블을 문자열 배열로 변환하는 중 (0) | 2023.09.08 |
VbComponents.제거가 항상 모듈을 제거하는 것은 아닙니다. (0) | 2023.09.08 |