我有这个代码与associatedtype
:
protocol ATState {
associatedtype Event
func nextState(event:Event) -> Self?
}
enum ATPlayerState:ATState {
case weak, powerful, poweringUp, poweringDown
func nextState(event: String) -> ATPlayerState? {
return nil
}
}
但是有一个编译时错误:"ATPlayerState不符合协议ATState";有一个修复它添加typealias Event = <Type>
, 如果我添加:typealias Event = String
,它修复了错误。但是我不明白为什么我需要这样做!
当我阅读文档时,我看到:
多亏了Swift的类型推断,你实际上不需要声明aInt的具体ItemType作为IntStack定义的一部分。
同样,这些示例不使用类型别名,它们只是实现方法。
那么这里不应该推断出关联的类型吗?
当你添加你的事件作为类型别名,编译器不给一个错误?这个代码块工作得很好。
enum ATPlayerState:ATState {
case weak, powerful, poweringUp, poweringDown
typealias Event = String
internal func nextState(event: String) -> ATPlayerState? {
return .powerful
}
}