我正在将 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) 相反,创建一个没有要求的空协议(protocol)。然后扩展 Int、String 等值以采用此协议(protocol),即使它实际上是一个“虚拟”协议(protocol)。然后创建我的设置字典 String : SettingsProtocol
这样我就可以在其中添加我想要的任何类型(在首先扩展类型之后)。
这两个选项对我来说都很奇怪,就像我试图绕过类型系统而不是让它为我工作一样。坦率地说,第二个选项很愚蠢,但无疑会根据需要起作用。
做这样的事情还有其他的可能性吗?此外,String 类型是否是设置字典中键的唯一明显类型?在这种情况下,Clojure 再次用有用的 keyword
类型宠坏了我,除了值类型之外,它还同时充当查找函数。
在我考虑使用这种新语言时,任何建议/指示都值得赞赏。
最佳答案
引用Array with string and number后回答,我相信你可以用下面的语法创建一个异构字典:
let heteroDict = Dictionary<Any, Any>()
你能试试这个吗?
关于swift - 异构设置的简单字典,从 Clojure 移植,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724592/