Swift继承了Objective-C的元类概念:类本身也被认为是对象.类Foo
的对象的类是Foo.self
,它是类型的Foo.Type
.如果Foo
继承自Bar
,那么Foo.self
也可以分配给类型的变量Bar.Type
.这至少有两个好处:
我现在特别关注第二个.只是为了确保每个人都理解我所追求的,这是一个例子:
class BaseFoo {
var description: String { return "BaseFoo" }
}
class DerivedFoo: BaseFoo {
override var description: String { return "DerivedFoo" }
}
let fooTypes: [BaseFoo.Type] = [BaseFoo.self, DerivedFoo.self] // metaclass magic!
for type in fooTypes {
let object: BaseFoo = type() // metaclass magic!
println(object)
}
Run Code Online (Sandbox Code Playgroud)
现在,我有一个AnyClass
对象数组(可以分配任何元类实例AnyClass
,就像任何对象都可以分配AnyObject
),我想找到哪些实现给定的协议.该协议将声明一个初始化器,我将像上面的例子中那样实例化该类.例如:
protocol Foo {
init(foo: String)
}
class …
Run Code Online (Sandbox Code Playgroud)