#swift
Вопрос:
Я хочу создать хранилище конфигураций ключей/значений для своего приложения.
Я пытаюсь придумать ConfigurationStore
протокол, который позволяет мне устанавливать и получать значения конфигурации из центрального местоположения (в данном случае это может быть карта). Значения должны быть проверены на тип для определенного ключа. например: значение для timeInSeconds
не может быть String
// psuedocode
protocol ConfigurationStore {
set(key: TypeCheckedKey, value: AssociatedValueForThatKey)
get(key: TypeCheckedKey) -> AssociatedValueForThatKey?
}
Ключи и связанные с ними значения должны быть проверены на тип. например. Я не должен быть в состоянии вызвать set для одного и того же ключа с 2 разными типами значений. Возможно, потребуется какое-то сопоставление пары Ключ:тип значения.
Как бы я это сделал ? В настоящее время я хочу поддерживать Int
Double
и String
настраивать значения
Я думал об использовании перечислений для ключей, но тогда я могу установить несколько типов значений для одного и того же ключа.
Все это должно быть общим, чтобы ключи и значения могли быть определены потребителем приложения.
Комментарии:
1. Покажите пример того, как вы бы использовали это, даже если оно не компилируется
Ответ №1:
Попробуйте это:
protocol ConfigurationStore {
associatedtype TypeCheckedKey
associatedtype AssociatedValueWithTheKey
func set(key: TypeCheckedKey, value: AssociatedValueWithTheKey)
func get(key: TypeCheckedKey) -> AssocicatedValueWithTheyKey?
}
UPD:
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
}
}
Комментарии:
1. Как бы я сопоставил, какой ключ принадлежит какому типу значения ?
2. @user2416162 это должно быть вашей реализацией. протокол опишите свой интерфейс/абстракцию
3. Как сделать абстракцию достаточно универсальной, чтобы она знала, какой тип значений разрешен для ключа