Swift 具有关联类型的泛型键值存储

Swift 具有关联类型的泛型键值存储,swift,Swift,我想为我的应用程序设计一个键/值配置存储 我试图提出ConfigurationStore协议,允许我从中心位置设置和获取配置值(在这种情况下可以是一个映射)。需要对特定键的值进行类型检查。例如:timeInSeconds的值不能是字符串 // psuedocode protocol ConfigurationStore { set(key: TypeCheckedKey, value: AssociatedValueForThatKey) get(key: TypeCheck

我想为我的应用程序设计一个键/值配置存储

我试图提出
ConfigurationStore
协议,允许我从中心位置设置和获取配置值(在这种情况下可以是一个映射)。需要对特定键的值进行类型检查。例如:
timeInSeconds
的值不能是
字符串

// psuedocode
protocol ConfigurationStore {

    set(key: TypeCheckedKey, value: AssociatedValueForThatKey)

    get(key: TypeCheckedKey) -> AssociatedValueForThatKey?

}
需要对键及其关联值进行类型检查。我不能用两种不同的值类型为同一个键调用set。可能需要某种类型的Key:ValueType对的映射

我该怎么做呢?我当前希望支持
Int
Double
String
配置值

我考虑过对键使用枚举,但是我可以将多个值类型设置为同一个键

所有这些都需要通用,以便应用程序的使用者可以定义键和值。

尝试以下操作:

protocol ConfigurationStore {
    associatedtype TypeCheckedKey
    associatedtype AssociatedValueWithTheKey

    func set(key: TypeCheckedKey, value: AssociatedValueWithTheKey)
    func get(key: TypeCheckedKey) -> AssocicatedValueWithTheyKey?    
}
UPD:


我如何映射哪个键属于哪个值类型?@user2416162这应该是您的实现。协议描述您的接口/抽象如何使抽象足够通用,但它知道密钥允许的值类型如何示例如何使用它,即使它不编译
final class SomeStore: ConfigurationStore {
    typealias TypeCheckedKey = String
    typealias AssociatedValueWithTheKey = String

    func set(key: TypeCheckedKey, value: AssociatedValueWithTheKey) {
        // your realisation
    }
    
    func get(key: TypeCheckedKey) -> AssocicatedValueWithTheyKey? {
        // your realisation
    }
}