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