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 中有一个非常相似的过程。

马上,我觉得我在与类型系统作斗争,我想知道最优雅的方法是什么。

这里有两个推荐给我的选项,它们看起来都很冗长或很奇怪:

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/

相关文章:

swift - 使用 Combine 框架的按钮操作

function - 快速随机函数

iOS Swift : Trying to use write image buffer to construct video, 未调用 finishWritingWithCompletionHandler。输出视频包含零字节

Clojure - 按索引合并两个列表

clojure - Clojure 状态如何工作?

swift - 无法将 Swift 添加到 PATH Linux

ios - 快速动态定位

macros - 卫生宏 : function parameter names?

tomcat - 部署到 Tomcat 的 leinring uberjar 的路由不正确

clojure - clojure 中的 hash-map 和 array-map 有什么区别?