2014-09-09 5 views
20

Swift에서는 기본 프로토콜을 확장하거나 특수화하는 프로토콜을 어떻게 정의합니까? 설명서가 명확하게 보이지 않는 것 같습니다.Swift에서 프로토콜을 확장하는 방법

Swift 프로토콜이 NSObject 프로토콜을 준수/확장합니까? 이것은 Swift가 프로토콜 메소드를 호출하기 위해 vtable 또는 message 기반의 디스패치를 ​​사용하는지 여부를 알기 때문에 흥미로운 질문입니다.

답변

28

프로토콜 상속은 Swift의 정규 상속 구문을 사용합니다.

protocol Base { 
    func someFunc() 
} 

protocol Extended : Base { 
    func anotherFunc() 
} 

스위프트 프로토콜은 기본적으로 NSObjectProtocol을 준수하지 않습니다. 프로토콜이 NSObjectProtocol을 따르도록 선택하면 프로토콜 만 클래스와 함께 사용하도록 제한됩니다.

7

구문은 수퍼 클래스에서 상속 된 클래스를 선언 할 때와 같습니다.

protocol SomeProtocol { } 

protocol SomeOtherProtocol: SomeProtocol { } 

아니요, 그렇지 않습니다. 여러분의 프로토콜이 NSObjectProtocol을 준수하기를 원할 경우, 새로운 프로토콜을위한 여러 프로토콜을 제공 할 수 있습니다.

protocol SomeOtherProtocol: SomeProtocol, NSObjectProtocol { } 
+0

대단히 감사합니다. Connor의 대답을 1 분 전에 받아 들였고 NSObjectProtocol이 클래스에만 국한된다는 흥미로운 점을 제공했습니다. –

관련 문제