从Metatype获取类型

时间:2018-06-01 14:40:19

标签: swift types

我正在努力理解swift 4中的类型和元类型之间的差异。特别是我希望创建一个这样的数组:

class A { ... }

class B {

    func doStuff() {
        let otherType = A.self
        let itemArr : [otherType] = // Objects of type A
    }

}

这会导致Use of undeclared type 'otherType'的编译时错误,我认为这是因为otherType实际上是A.Type。我认为这可能与Generics有关,但问题是编译时可能不知道类型......

这个问题有解决方法吗?

1 个答案:

答案 0 :(得分:0)

Swift非常强大,因为您可以将类型作为参数传递并创建类型变量。这很有吸引力,但是,对于您的问题,有更好的解决方案。

定义protocol CustomArrayPopulatable {}并将其添加到可添加到数组的所有子类/类中。例如。 A1: CustomArrayPopulatable; A2: CusstomArrayPopulatable

使用泛型类型,您可以实现极佳的抽象。但是,请记住,如果您稍后需要转换为特定的子类型,则需要自己投射,例如:if type as? A1 {...},因此请在开始之前仔细使用泛型并思考,是否真的需要它们。 / p>