【问题标题】:Swift: Protocol With associatedTypeSwift:具有关联类型的协议
【发布时间】:2019-12-13 04:47:57
【问题描述】:

我有一个关于具有关联类型的协议的问题,为什么我不能使协议成为我的实例的类型,例如:

我知道我可以使用类型擦除来解决问题,但是为什么具有关联类型的协议不喜欢成为实例的类型,如果您会说因为关联类型也用作约束,那么我想在协议内部而不是在其扩展内部实现属性,因为协议扩展有能力控制谁可以访问它的属性,为什么我们仍然有这个问题。

谢谢。

【问题讨论】:

标签: swift protocols associated-types


【解决方案1】:

有很多文章和答案 (like this one) 描述了原因,但总而言之,它需要associatedtype。变量不能有associatedtype。所以除了 Type Erasure 方法(你不想要的),你可以简单地通过在类型中添加 some 关键字使其不透明

var objectA: some ProtocolA = A()

【讨论】:

  • 您还有其他问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多