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

时间:2016-10-23 11:32:45

标签: 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,它会修复错误。但我不明白为什么我需要这样做!

当我阅读the documentation时,我看到了:

  

感谢Swift的类型推断,你实际上并不需要声明一个   具体的IntType作为IntStack定义的一部分。

此外,示例不使用类型别名,它们只是实现方法。

那么不应该在这里推断出相关的类型吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

当您将Event添加为typealias时,编译器不会出错?这段代码块运行得很好。

enum ATPlayerState:ATState {

    case weak, powerful, poweringUp, poweringDown

    typealias Event = String

    internal func nextState(event: String) -> ATPlayerState? {
        return .powerful
    }

}