将对象转换为存储在变量中的Class

时间:2017-06-12 15:06:09

标签: ios swift sprite-kit

是否可以在变量中存储类类型,然后使用该变量将对象强制转换为该类类型?

我似乎能够将类类型存储在枚举中的变量中,但是我们无法使用此变量将新对象强制转换为此类型。

我有一个子类型

的枚举
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()
        }
    }
}

1 个答案:

答案 0 :(得分:-2)

这可能会对你有所帮助:

工厂方法: 工厂模式用于替换类构造函数,抽象对象生成过程,以便可以在运行时确定实例化对象的类型。

https://github.com/ochococo/Design-Patterns-In-Swift#-factory-method