我想为实现这些协议的对象构建协议映射 . 然后我希望能够获得给定协议的实现 .
这是我到目前为止所得到的:
class Services {
var map = NSMapTable(keyOptions: .CopyIn, valueOptions: .WeakMemory)
func register(type: T, target: AnyObject) {
map.setObject(target, forKey: String(type))
}
func get(type: T) -> AnyObject {
guard let target = map.objectForKey(String(type)) else {
fatalError("Not registered")
}
return target
}
}
我可以这样称呼它:
protocol Foo {
func qux()
}
class Bar: Foo {
func qux() {}
}
services.register(Foo.self, target: Bar())
这太好了 . 但是当我想要检索它时:
let foo: Foo = services.get(Foo.self)
...以上行生成错误:
Foo.swift:12:34:无法将调用结果类型'AnyObject'转换为预期类型'Foo'
如何指定泛型函数 get 返回实现 T 中引用的协议的对象?
我想避免不得不接听电话 .