为什么 Swift 不能在这里推断类型?



我有这个代码与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
    }
}

相关内容

最新更新