我的代码包含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
,它会修复错误。但我不明白为什么我需要这样做!
当我阅读the documentation时,我看到了:
感谢Swift的类型推断,你实际上并不需要声明一个 具体的IntType作为IntStack定义的一部分。
此外,示例不使用类型别名,它们只是实现方法。
那么不应该在这里推断出相关的类型吗?
谢谢!
答案 0 :(得分:0)
当您将Event添加为typealias时,编译器不会出错?这段代码块运行得很好。
enum ATPlayerState:ATState {
case weak, powerful, poweringUp, poweringDown
typealias Event = String
internal func nextState(event: String) -> ATPlayerState? {
return .powerful
}
}