【发布时间】:2014-10-08 08:01:06
【问题描述】:
使用 Swift,我想编写一个协议,指定实现类必须有一个函数,该函数接受一个枚举(它遵守给定的协议),其中枚举类型是一般指定的。我试过这个:
protocol Message {}
protocol Subscriber {
func receive<T where T:Message>(message:T)
}
enum Greeting : Message {
case Hello, Goodbye
}
class SomeObject : Subscriber {
func receive<Greeting>(message: Greeting) {
switch message {
case .Hello:
println("Hello")
case .Goodbye:
println("Goodbye")
}
}
}
编译失败,并在每个案例行显示消息“Enum case pattern cannot match values of the non-enum type 'Greeting'”。这似乎是因为订阅者协议期望的东西不比 Message 更专业,但我根据 Greeting 进行设置,虽然它实现了 Message,但更专业。 (我说的对吗?)
那么,请问我该怎么做?
【问题讨论】:
标签: class generics enums swift protocols