Swift - 如何将类型/对象(名称或实例)传递给方法然后(a)获取类型(b)实例化它?

时间:2015-10-02 21:52:34

标签: swift

我需要这样做,但我遇到各种各样的问题:

class MyClass {
}

class SomeClass {
  func callMethod(object) {
    let theType = object.type // I need the same result as MyClass.self
    let newInstance = object() // I need the same result as MyClass()
  }
}

let someClass = SomeClass()
let object = MyClass
someClass.callMethod(object)

你是如何实际做到的?

我希望能够指定一种类型(例如MyClass)。它可以是类型名称或其实例,然后获取代码注释中显示的两个值。

如果我传入两个单独的变量会更容易,但我确信我可以在一个变量中完成。

1 个答案:

答案 0 :(得分:0)

您可以使用实例的.dynamicType属性来获取其类型。然后,您可以在其上调用required init方法(或任何其他class / static方法)。

let theType = object.dynamicType
let newInstance = theType.init()

注意:此代码会根据object的类型进行编译。如果类型采用required init()方法,则可以安全地呼叫dynamicType。但是,如果类型为NSObject,编译器也会让您在init()上调用dynamicType,即使子类可能有也可能没有给出init()方法Swift初始化器继承如何工作。可以说这是编译器中的一个错误,因此如果您选择这样做,请谨慎使用此代码。感谢@nhgrif关于该主题的讨论。