Swift类作为参数以在以后实例化

时间:2018-09-26 15:10:43

标签: ios swift

我有以下Swift代码。我的目标是能够将FirstItemSecondItem的类型或类传递到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)

如何修复上面的代码以允许这样做,以便管理器接受类本身而不是类的实例。

1 个答案:

答案 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)