是否可以在变量中存储类类型,然后使用该变量将对象强制转换为该类类型?
我似乎能够将类类型存储在枚举中的变量中,但是我们无法使用此变量将新对象强制转换为此类型。
我有一个子类型
的枚举enum FruitType: Int {
case orange, apple, lemon, lime
var className: Fruit.Type {
switch self {
case.orange:
return Orange.self
case.apple:
return Apple.self
case.lemon:
return Lemon.self
case.lime:
return Lime.self
}
}
}
我有这些游戏对象的子类(Orange,Apple,Lemon和Lime),它们都继承自“Fruit”
稍后我试图使用该变量将对象强制转换为该类型,但它报告错误
错误“使用未声明的类型'fruitType'
func createFruit(fruitType: FruitType, name: String) {
if let orange = self.childNode(withName: name) as? fruitType.className {
self.orange = orange
}
etc...
}
我也尝试了fruitType.className(self.childNode(withName: name))
同样的结果
我已经研究过泛型,但找不到适合这种情况的任何东西。
编辑以显示实际示例
简化了上述问题,使问题更容易说明。我如何处理这个的真正本质是我正在将一个SKS场景文件作为基于fruitType的SKReferenceNode加载,我需要相应地转换该SKReferenceNode
func loadFruit(fruitType: FruitType) {
var fruit: Fruit!
if let fruitFile = SKReferenceNode(filename: fruitType.fileName) {
if let fruitNode = fruitFile.childNode(withName: fruitType.name) as? fruitType.className {
fruitNode.setup()
}
}
}
答案 0 :(得分:-2)
这可能会对你有所帮助:
工厂方法: 工厂模式用于替换类构造函数,抽象对象生成过程,以便可以在运行时确定实例化对象的类型。
https://github.com/ochococo/Design-Patterns-In-Swift#-factory-method