2017-02-08 2 views
0

에 제약 조건을 만드는 방법 난 단지 UIView에서 상속 클래스에 의해 구현 될 수 프로토콜을 만들려고, 놀랍게도을 무엇이 코드 (SWIFT 3.0) 오류없이 컴파일 할 때 :프로토콜

protocol TestsProtocol { 
    func test() 
} 

extension TestsProtocol where Self: UIView { } 

class FooClass: TestsProtocol { 

    func test() { 

    } 
} 

우리 FooClassUIView에서 상속받지 않는 것을 볼 수 있습니다. 프로토콜 확장을 사용하면 UIView에서 상속받은 클래스 만이를 구현할 수 있습니다. 나는 Swift에서 컴파일하지 않을 것임을 기억한다.

+0

Swift 2.1에서 컴파일되지 않는 이유에 대해 생각할 수 없습니다. 프로토콜 확장은 프로토콜을 준수 할 수있는 유형을 제한하지 않고 단지 기본 구현을 추가하도록합니다. 하지만 진짜 질문은 타입이 * 모든 프로토콜의 요구 사항을 충족 할 수 있는지, 왜 UIView가 아닌 ​​경우에 * 준수해서는 안되는 이유입니까? – Hamish

+0

가능한 특정 클래스 유형에만 적용 할 수있는 [extension]의 가능한 복제본 (http://stackoverflow.com/questions/41349324/extension-that-can-only-be-applied-on-a-given-class- 타입) - 거기에 대한 답은 네가 원하는 바를 정확히 믿을 수는 없다. 대답은 단순히 준수 유형을 기반으로 프로토콜 준수를 제한 할 수 없다는 것입니다. – Hamish

답변

2

Swift에서는 이것을 할 수 없다. 또한 유용한() 함수를 가지고 TestsProtocol를 구현하고있는 UIView (또는 서브 클래스)입니다

extension TestsProtocol where Self: UIView { 
    func useful() { 
     // do something useful 
    } 
} 

지금 모든 클래스 : 확장 구문은 뭔가 다른 않습니다.