【发布时间】:2018-05-20 18:35:01
【问题描述】:
我尝试使用参数以通用方式初始化一个类,但它不起作用...
protocol EntityCreator: class {
func createEntity<EntityType: EntityClass & EntityCreatorInitializable>(type: EntityType.Type, _ initialize: @escaping (EntityType) -> Void)
}
protocol EntityCreatorInitializable {
init(entityCreator: EntityCreator)
}
class EntityClass: NSObject { }
class MyClass: EntityClass, EntityCreatorInitializable {
required init(entityCreator: EntityCreator) {
super.init()
// use the entityCreator
}
}
// On the entity creator implementation :
class EntityCreatorImplementation: EntityCreator {
var toAdd = Set<EntityClass>()
func createEntity<EntityType: EntityClass & EntityCreatorInitializable>(type: EntityType.Type, _ initialize: @escaping (EntityType) -> Void) {
// This creation doesn't work...
let newEntity = EntityType(entityCreator: self)
initialize(newEntity)
self.toAdd.insert(newEntity)
}
}
我在编译时遇到的错误是
非名义类型 'EntityType' 不支持显式初始化
关于如何实现这一点的任何想法?
谢谢!!
EDIT:我添加了EntityClass的定义。在我的项目中,它是一个 GKEntity,但问题与 NSObject 相同
EDIT : 添加了 toAdd Set,忘记声明了(但在 createEntity 方法中使用)
【问题讨论】:
-
EntityClass 未定义。
-
在描述中添加