Generics 约束泛型参数

Generics 约束泛型参数,generics,swift,Generics,Swift,我有一个名为Machine的协议。它有一个typealias作为它可以读取的输入。它被限制为可散列的类型 protocol Machine { typealias InputType: Hashable // ... } 有一个实现此协议的类称为OrMachine class OrMachine<T: Hashable>: Machine { } 这给了我以下的错误 同一类型约束类型“T”不符合所需的协议“Hashable” 为什么会发生这种情况?在OrM

我有一个名为
Machine
的协议。它有一个
typealias
作为它可以读取的输入。它被限制为可散列的
类型

protocol Machine {

    typealias InputType: Hashable

    // ...

}
有一个实现此协议的类称为
OrMachine

class OrMachine<T: Hashable>: Machine {

}
这给了我以下的错误

同一类型约束类型“T”不符合所需的协议“Hashable”

为什么会发生这种情况?在
OrMachine
中,我清楚地说
T
实现了
Hashable


这是虫子吗?还是我做错了什么?

你试过init(machines:[MachineType]){}@TomErikStøwer
T
已经在封闭的
类中声明为
Hashable
类型。我没有答案,但它似乎已经消除了错误。也许在类声明中完成的类型约束没有被在init方法中完成的下一级类型声明继承?肯定是个bug。我给你装了雷达。@Daveabarhams谢谢!
init<MachineType: Machine where MachineType.InputType == T>(machines: [MachineType]){

}