如何在 Swift 中实例化一个 class(存储在数组中)?

How do I instanciate a class (stored in an Array) in Swift?

我想保留几个 类 的数组并根据需要实例化它们。这是一些演示代码:

class AClass {
   func areYouThere() -> String {
      return "Yes, I am!"
   }
}

class FirstClass: AClass {
   override func areYouThere() -> String {
      return "Yes, I am #1!"
   }
}

class SecondClass: AClass {
   override func areYouThere() -> String {
      return "Yes, I am #2!"
   }
}

let className = FirstClass.self
let classReferences: [AClass.Type] = [FirstClass.self, SecondClass.self]

let instanceOfClass = classReferences[0].init()
let test = instanceOfClass.areYouThere()

代码确实可以编译,但是当我 运行 它时,"test" 将保留 "Yes, I am!"(没有 #1),因为 instanceOfClass 是 "AClass" 的一个实例,不是 "FirstClass"。我想,我的数组的类型 [AClass.Type] 是错误的。我也试过 "AnyClass",但编译器抱怨说 "init" 没有在 "AnyClass" 中定义。有什么想法吗?

谢谢! Ingo.

您的基础 class 中需要 required init() 初始值设定项。

class AClass {
    required init() {} // <- HERE

    func areYouThere() -> String {
        return "Yes, I am!"
    }
}

因为子class是may not inherit init() initializer.

IMO,这是一个编译器错误。编译器应该报告 classReferences[0] 可能没有 init().

顺便说一句,你可以:

let instanceOfClass = classReferences[0]()

不用写.init.