是否可以将类类型存储在变量中,然后使用该变量将对象强制转换为该类类型?
我似乎能够将类类型存储在枚举中的变量中,但无法将这个变量转换为该类型的新对象。
我有一个子类类型的枚举
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
}
}
}我有这些游戏对象的子类(橙、苹果、柠檬和柠檬),它们都是从“水果”继承的。
稍后,我尝试使用该变量将对象强制转换为该类型,但它报告了一个错误。
错误“未声明类型'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场景文件作为基于SKReferenceNode的fruitType加载,我需要相应地转换该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()
}
}
}发布于 2017-06-12 15:14:52
也许这会帮到你:
工厂方法:使用工厂模式替换类构造函数,抽象对象生成过程,以便在运行时确定实例化对象的类型。
https://github.com/ochococo/Design-Patterns-In-Swift#-factory-method
https://stackoverflow.com/questions/44502746
复制相似问题