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

时间:2015-02-23 12:22:58

标签: arrays class swift reference

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

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”将保持“是的,我是!” (没有#1),因为instanceOfClass是“AClass”的实例,而不是“FirstClass”。我想,我的Array的类型[AClass.Type]是错误的。我也试过“AnyClass”,但是比编译器抱怨的那样,“init”没有在“AnyClass”中定义。有什么想法吗?

谢谢! INGO。

1 个答案:

答案 0 :(得分:2)

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

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

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

因为子类may not inherit init() initializer

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

顺便说一句,你可以:

let instanceOfClass = classReferences[0]()

无需撰写.init