Swift 从Clojure移植的异构设置的简单字典

Swift 从Clojure移植的异构设置的简单字典,swift,clojure,Swift,Clojure,我正在将Clojure程序移植到Swift。作为一种动态类型语言,很容易将不同的值组合在一起,如下所示: (def settings {:total-gens 5 :name "Incredible Program" :options [:a :b :c :d :e] :final-comment "Hope you had a good time."}) 我在程序中传递这样的设置贴图,我希望在Swift

我正在将Clojure程序移植到Swift。作为一种动态类型语言,很容易将不同的值组合在一起,如下所示:

(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
,这样我就可以在其中添加我想要的任何类型(首先扩展类型之后)

这两个选项对我来说都很奇怪,好像我试图绕过类型系统,而不是让它为我工作。坦率地说,第二种选择是愚蠢的,但毫无疑问会在需要时起作用

这样做还有其他可能性吗?此外,字符串类型是否是设置字典中键的唯一明显类型?在本例中,Clojure再次使用了有用的
关键字
类型,该类型除了值类型外,还同时充当查找函数

<> >任何建议/指针在我考虑这一新语言时都会被赏识。

在回答答案后,我相信你可以用下面的语法创建一个异构字典:

let heteroDict = Dictionary<Any, Any>()
let heteroDict=Dictionary()
您能试试这个吗?

字典值的类型取决于字典索引的值。哎哟我不知道如何用任何语言来表达这一点。然而,这显然是一个常见的情况。值类型的
enum
,如果需要,索引类型的
enum从远处看更简单。