programing

프로토콜이 특정 클래스에서만 채택되도록 요구하는 방법

muds 2023. 9. 8. 21:48
반응형

프로토콜이 특정 클래스에서만 채택되도록 요구하는 방법

이 프로토콜을 원합니다.

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사용할 수 있습니다.

그 이후로 주목할 것.UIViewControllerclass또한, 이 프로토콜은 대리인과 같은 약한 속성에 대해 구현될 수 있습니다.

편집 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

반응형