我正在努力理解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有关,但问题是编译时可能不知道类型......
这个问题有解决方法吗?
答案 0 :(得分:0)
Swift非常强大,因为您可以将类型作为参数传递并创建类型变量。这很有吸引力,但是,对于您的问题,有更好的解决方案。
定义protocol CustomArrayPopulatable {}
并将其添加到可添加到数组的所有子类/类中。例如。 A1: CustomArrayPopulatable
; A2: CusstomArrayPopulatable
。
使用泛型类型,您可以实现极佳的抽象。但是,请记住,如果您稍后需要转换为特定的子类型,则需要自己投射,例如:if type as? A1 {...}
,因此请在开始之前仔细使用泛型并思考,是否真的需要它们。 / p>