我需要这样做,但我遇到各种各样的问题:
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)。它可以是类型名称或其实例,然后获取代码注释中显示的两个值。
如果我传入两个单独的变量会更容易,但我确信我可以在一个变量中完成。
答案 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关于该主题的讨论。