Swift 如何定义专门用于泛型协议的协议,以便在类型声明中使用它?

Swift 如何定义专门用于泛型协议的协议,以便在类型声明中使用它?,swift,swift-protocols,Swift,Swift Protocols,我是一名学习iOS开发的Android开发人员,我面临的这个问题与Kotlin/Java接口无关,但我无法通过Swift协议解决 假设我们有这个协议: 协议值存储{ 关联类型值 变量值:值?{get set} } 在Kotlin/Java中,如果我想使用泛型抽象来定义变量类型,我只需要使用带有类型参数的泛型接口: val stringStore: ValueStore<String> 为了像这样使用后者: let stringStore:stringStore 上述声明是我努力

我是一名学习iOS开发的Android开发人员,我面临的这个问题与Kotlin/Java接口无关,但我无法通过Swift协议解决

假设我们有这个协议:

协议值存储{
关联类型值
变量值:值?{get set}
}
在Kotlin/Java中,如果我想使用泛型抽象来定义变量类型,我只需要使用带有类型参数的泛型接口:

val stringStore: ValueStore<String>
为了像这样使用后者:

let stringStore:stringStore
上述声明是我努力实现的目标。但是编译器告诉我,
协议“StringStore”只能用作一般约束,因为它具有自身或关联的类型要求

虽然在类型声明中,我可以使用一个专门的泛型具体实现,即
UserDefaultsValueStore
,但这违反了依赖项反转原则


是否可以专门化一个具有关联类型的协议,并且仍然保持抽象级别

如果我正确理解了这个问题。。。试试这个:

protocol ValueStoreType {
  associatedtype Value
  var value: Value? { get set }
}

struct ValueStore<T>: ValueStoreType {
  var value: T?
}
协议值存储类型{
关联类型值
变量值:值?{get set}
}
结构ValueStore:ValueStoreType{
var值:T?
}
然后您将能够执行以下操作:

var stringStore: ValueStore<String>
var-stringStore:ValueStore

这样我就可以声明一个具体的实现类型,而不是抽象类型。这带走了抽象层;这似乎再次打破了D.I.P.我担心我想要实现的概念在语言层面上不受支持,我想知道是否有解决方法。