2017-09-14 6 views
0

일반 프로토콜을 전문으로하는 프로토콜을 사용할 수 있습니까? 나는 이런 식으로 뭔가 싶어 :일반 프로토콜 전문 스위프트 프로토콜

protocol Protocol: RawRepresentable { 
    typealias RawValue = Int 
    ... 
} 

이 컴파일 않습니다,하지만 나는 프로토콜 인스턴스에서 init 또는 rawValue에 액세스하려고 할 때, 그 유형은 RawValue 대신 Int입니다.

protocol MyProtocol: RawRepresentable where RawValue == Int { 
} 

을 그리고 지금 MyProtocol에 정의 된 모든 메소드는 지능 rawValue이있을 것이다 :

+0

: 그 RawRepresentable을 채택

extension MyProtocol { var asInt: Int { return rawValue } } enum Number: Int, MyProtocol { case zero case one case two } print(Number.one.asInt) // prints 1 

유형하지만 RawValue는 지능은 제한된 프로토콜을 채택 할 수 있지 않습니다 '원시 값? –

+1

프로토콜에 대해 더 좋은 이름을 찾을 수 없습니까? –

답변

2

스위프트 4, 당신은 당신의 프로토콜에 제약 조건을 추가 할 수 있습니다. 예를 들면 : 당신은`지능으로 열거에만 적용의 ​​프로토콜을 만들기 위해 노력하고

enum Names: String { 
    case arthur 
    case barbara 
    case craig 
} 

// Compiler error 
extension Names : MyProtocol { }