Я портирую программу Clojure на Swift. Будучи динамически типизированным языком, легко бросить различные значения вместе, как это:Простой словарь гетерогенных настроек, портированный с Clojure
(def settings {:total-gens 5
:name "Incredible Program"
:options [:a :b :c :d :e]
:final-comment "Hope you had a good time."})
проходят параметры карта, как это вокруг в программе, и я хотел бы иметь довольно подобный процесс в Swift.
Сразу же, я чувствую, что борюсь с системой типов, и мне интересно, что это самый элегантный способ сделать это.
Вот два варианта, которые были рекомендованы для меня, оба из которых, кажется многословным или странно:
1) Во-первых, сделайте enum
тип всех возможных типов установки значений. Затем создайте словарь String: SettingsEnumType
. Каждый раз, когда мне нужно добавить новый тип значения в словарь, мне сначала нужно изменить определение перечисления, а затем изменить словарь.
2) Вместо этого создайте пустой протокол без каких-либо требований. Затем добавьте такие значения, как Int, String и т. Д., Чтобы принять этот протокол, хотя он действительно является «фиктивным» протоколом. Затем сделайте мой словарь настроек String : SettingsProtocol
, чтобы я мог добавить туда любой тип, который мне нужен (после первого расширения типа).
Обе эти опции кажутся мне странными, как будто я пытаюсь обойти систему типов, а не работать для меня. Второй вариант откровенно глупый, но, без сомнения, будет работать по мере необходимости.
Есть ли какие-либо другие возможности для выполнения чего-то подобного? Кроме того, будет ли тип String единственным очевидным типом для ключей в словаре настроек? В этом случае Clojure снова испортил мне полезный тип keyword
, который одновременно действует как функция поиска в дополнение к типу значения.
Любые советы/указатели, оцененные, поскольку я рассматриваю этот новый язык.
* Тип * словаря-значения зависит от * значения * словаря-индекса. Ой! Я не знаю, как выразить это аккуратно на любом языке. Но это, безусловно, общий случай. «Enum» для типа значения и, если нужно, для типа индекса, выглядит более просто издалека. – Thumbnail