Protocolをenumだけに準拠させてrawValueを使えるようにすることはできますか。
MyProtocolを、enumのみに準拠させられるようにして、enumのrawValueを使えるようにすることは可能ですか。
以下のようにMyProtocolでenumのrawValueを使えるようにしたいです。
protocol MyProtocol {
}
enum MyEnum1: String, MyProtocol {
case a = "AAA1"
case b = "BBB1"
}
enum MyEnum2: String, MyProtocol {
case a = "AAA2"
case b = "BBB2"
}
enum MyEnum3: String, MyProtocol {
case a = "AAA3"
case b = "BBB3"
}
class MyClass {
func methodA(foo: MyProtocol) {
print(foo.rawValue) // これが出来るようにしたい
}
func methodB() {
methodA(foo: MyEnum1.a) // "AAA1"
methodA(foo: MyEnum2.a) // "AAA2"
methodA(foo: MyEnum3.a) // "AAA3"
}
}
MyProtocolで独自にrawValを定義することで一応やりたいことはできましたが、全てのenumでrawValを書く手間が発生するため、できればrawValueをそのまま使いたいです。
protocol MyProtocol {
var rawVal: String { get }
}
enum MyEnum1: String, MyProtocol {
var rawVal: String { return self.rawValue }
case a = "AAA1"
case b = "BBB1"
}
class MyClass {
func methodA(foo: MyProtocol) {
print(foo.rawVal) // これならできる
}
}
考えをまとめるとenumにスーパークラスみたいなものを作りたいということなのですが、そもそもProtocolの使い方が間違っていますでしょうか……?