2017-09-14 5 views
0

汎用プロトコルを特化したプロトコルを使用することは可能ですか?スウィフトプロトコル特化汎用プロトコル

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

これはコンパイルんが、私はプロトコルインスタンスからinitまたはrawValueにアクセスしようとすると、その種類はRawValue代わりのIntです:私はこのような何かをしたいです。スウィフト4では

+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はIntがあなたの制約のプロトコルを採用することはできませんされていません'生の価値? –

+1

あなたのプロトコルのより良い名前が見つかりませんか? –

答えて

2

、あなたのプロトコルに制約を追加することができます

protocol MyProtocol: RawRepresentable where RawValue == Int { 
} 

そして今MyProtocol上で定義されているすべてのメソッドは、のInt rawValueを持つことになります。例えば:あなたは `のIntと列挙型にのみ適用のプロトコルを作成しようとしている

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

// Compiler error 
extension Names : MyProtocol { } 
関連する問題