【发布时间】:2017-06-07 14:51:05
【问题描述】:
我正在使用 Generic 开发应用程序。
但是在泛型类中使用泛型函数存在问题。
如你所知,我们使用泛型:
class ClassA{
static func myFunction<Type>()->Type where Type : Protocol1, Type : Protocol2{
...
return Type
}
}
class ClassB{
func myFunction(){
let a : ClassC = ClassA.myFunction()
}
}
class ClassC : Protocol1, Protocol2{
}
而且,这很好用。
但我想做的是:
class ClassA{
static func myFunction<Type>()->Type where Type : Protocol1, Type : Protocol2{
...
return Type
}
}
class ClassB<Type : Protocol1, Protocol2>{
func myFunction(){
let a : Type = ClassA.myFunction()
}
}
这段代码给了我“无法推断通用参数'类型'”错误。
我试过了:
class ClassB<Type> where Type : Protocol1, Type : Protocol2{
但是没用……
是否可以使用泛型类型来推断其他泛型类型?
【问题讨论】:
-
问题仅仅是你说的
ClassB<Type : Protocol1, Protocol2>——它定义了两个通用占位符,Type和Protocol2。你想说ClassB<Type : Protocol1 & Protocol2>,它定义了一个单个通用占位符Type,它同时符合Protocol1和Protocol2。