import UIKit
protocol Identifiable
{
}
protocol Storage
{
func test() -> Data<Identifiable>
}
class DiskStorage<T where T:Identifiable, T:NSCoding>:Storage
{
func test() -> Data<Identifiable>
{
return Data<T>() //error: T is not identical to Identifiable
}
}
class Data<T where T:Identifiable>
{
}
我认为可以使用符合协议的泛型类型来调用引用相同协议的方法。怎么施展呢?几乎尝试了一切,没有任何工作。也许我理解错了......
对这一个人有任何帮助吗?非常感谢
答案 0 :(得分:11)
试试这个
protocol Identifiable
{}
class Data<T where T:Identifiable>
{}
protocol Storage
{
typealias Element : Identifiable
func test() -> Data<Element>
}
class DiskStorage<T where T:Identifiable, T:NSCoding>:Storage
{
func test() -> Data<T>
{
return Data<T>()
}
}
// from REPL
32> var s = DiskStorage<Foo>()
s: DiskStorage<Foo> = {}
33> s.test()
$R0: Data<Foo> = {}
正如我在this answer中所指出的那样,Data<T>
与<{1}}的没有关系。因此,您无法使用期望Data<Identifiable>
的{{1}},从而导致编译错误。