【发布时间】:2017-11-11 12:35:24
【问题描述】:
在我的实际代码中,MyFoo 对象做了其他一些我不想分享的实现细节。因此,我试图将它隐藏在我的 Foo 协议后面,但是,我找不到必要的 where 子句来正确映射类型:
protocol Foo {
associatedtype Bar
func process(bar:Bar)
}
class MyFoo<T>: Foo {
func process(bar: T) {}
}
class Buzz<U> {
private let myFoo = MyFoo<U>()
init<BarProcessor:Foo>(block:(BarProcessor)->Void) where BarProcessor.Bar == U {
block(myFoo) // error: '(@lvalue MyFoo<U>) -> Void' is not convertible to '(BarProcessor) -> Void'
}
}
或者我在这里遗漏了一个更基本的概念来说明为什么这不起作用?
【问题讨论】: