Swift 4-来自associatedtype的子类泛型约束

Swift 4-来自associatedtype的子类泛型约束,swift,generics,swift4,Swift,Generics,Swift4,我想编写一个Swift协议,它需要一个类型来指定一个基类,并实现对该基类的子类进行操作的方法。下面是它可能的样子(不编译): 协议存储库{ 关联类型基模型 //T必须子类BaseModel func all(来自类型:T.type)->[T] } 但这会生成以下编译器错误: 从非协议、非类类型“Self.BaseModel”继承 这是有意义的,因为BaseModel可以用结构类型指定,不允许子类化。因此,我尝试创建一个空协议,约束到类,试图通知编译器该类型将是类类型,并允许子类约束 协议模型:

我想编写一个Swift协议,它需要一个类型来指定一个基类,并实现对该基类的子类进行操作的方法。下面是它可能的样子(不编译):

协议存储库{
关联类型基模型
//T必须子类BaseModel
func all(来自类型:T.type)->[T]
}
但这会生成以下编译器错误:
从非协议、非类类型“Self.BaseModel”继承

这是有意义的,因为BaseModel可以用结构类型指定,不允许子类化。因此,我尝试创建一个空协议,约束到类,试图通知编译器该类型将是类类型,并允许子类约束

协议模型:类{}

然后,我使用模型类协议约束BaseModel类型:

associatedtype基本模型:模型

但这会从上面生成相同的编译器错误。是否可以在协议上从
associatedtype
强制子类约束?我希望上面的代码能够编译,或者Swift能够允许类似以下的东西来允许子类约束:


associatedtype BaseModel:class

在实现协议之前,如果类型未知,则应使用关联的类型。但若类型已知,则无需使用关联的类型。我想你能做到

protocol Model: class { }

class BaseModel : Model { }

protocol Repository {
        func all<T : BaseModel>(from type: T.Type) -> [T]
}
协议模型:类{}
类BaseModel:模型{}
协议存储库{
func all(来自类型:T.type)->[T]
}
protocol Model: class { }

class BaseModel : Model { }

protocol Repository {
        func all<T : BaseModel>(from type: T.Type) -> [T]
}