我有以下Swift代码。我的目标是能够将FirstItem
或SecondItem
的类型或类传递到Manager
中,以便稍后进行实例化(通过调用createItem
函数)。
protocol CustomItem {
static func instantiate() -> CustomItem
}
class FirstItem: CustomItem {
static func instantiate() -> CustomItem {
return FirstItem()
}
}
class SecondItem: CustomItem {
static func instantiate() -> CustomItem {
return SecondItem()
}
}
class Manager {
var itemClass: CustomItem
func createItem() {
let itemInstance = itemClass.instantiate()
}
init(itemClass: CustomItem) {
self.itemClass = itemClass
}
}
let manager = Manager(itemClass: FirstItem)
如何修复上面的代码以允许这样做,以便管理器接受类本身而不是类的实例。
答案 0 :(得分:0)
通过将您在init函数中接受的参数类型更改为CustomItem.Type
,并将您要传递的值更改为FirstItem.self
,将可以正常工作。例如,将代码更改为以下内容应该可以。
protocol CustomItem {
static func instantiate() -> CustomItem
}
class FirstItem: CustomItem {
static func instantiate() -> CustomItem {
return FirstItem()
}
}
class SecondItem: CustomItem {
static func instantiate() -> CustomItem {
return SecondItem()
}
}
class Manager {
var itemClass: CustomItem.Type
func createItem() {
let itemInstance = itemClass.instantiate()
}
init(itemClass: CustomItem.Type) {
self.itemClass = itemClass
}
}
let manager = Manager(itemClass: FirstItem.self)