24.不透明类型

2021-07-27  本文已影响0人  LucXion

不透明类型解决的痛点:封装公共接口时可以灵活的选择对外界披露的信息,解决返回具体类型、协议限制

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))
上一篇 下一篇

猜你喜欢

热点阅读