不透明类型解决的痛点:封装公共接口时可以灵活的选择对外界披露的信息,解决返回具体类型、协议限制
protocol Name:Equatable {} //有合成实现的协议也不能直接作为返回值
protocol Container {
associatedtype Item // 有关联类型的协议不能作为返回类型。
var count: Int { get }
subscript(i: Int) -> Item { get }
}
extension Array: Container { }
/*
// 错误:没有足够多的信息来推断 C 的类型。
func makeProtocolContainer<T, C: Container>(item: T) -> C {
return [item]
}
*/
func makeOpaqueContainer<T>(item: T) -> some Container {
return [item]
}
let opaqueContainer = makeOpaqueContainer(item: 12)
let twelve = opaqueContainer[0]
print(type(of: twelve))
网友评论