java怎么用函数返回值_如何从通用函数返回值作为协议的实现?

我想为实现这些协议的对象构建协议映射 . 然后我希望能够获得给定协议的实现 .

这是我到目前为止所得到的:

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 中引用的协议的对象?

我想避免不得不接听电话 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值