【发布时间】:2016-01-18 07:42:34
【问题描述】:
通常我会这样创建我的 swift 字典:
var myDict: [String: String]
但是我如何创建一个可以作为值的字典,只有一个字符串或一个布尔值?
如果我像下面的代码那样声明字典
var myDict: [String: Any]
那么我的数组现在可以容纳任何我不想要的对象。有没有办法声明 Dictionary 只接受 String 和 Bool 值类型?
[编辑] - 用例是:我需要一个键和值的字典。但我只想将值限制为字符串或布尔值。没有其他的。目标是最终使用此 Dictionary 转换为 JSON 格式以发送到某个服务器。根据下面的答案,我唯一的选择是枚举还是类/结构?我想知道是否有办法使 Bool 和 String 符合某种协议?
这个想法可能是这样声明字典
var myDict : [String: stringOrBool]
然后像这样填写字典
myDict["firstKeyStringValue"] = "my first string value" // This should work
myDict["firstKeyBoolValue"] = true // This should work
myDict["someOtherKey"] = 123 // This should fail
编辑 2 根据下面的答案,我选择了协议方法,因为它在语法上更容易。但是正如下面cmets中提到的Catfish,它可能会占用更多内存。
【问题讨论】:
-
考虑使用自定义的
struct或class而不是Dictionary。 -
为什么要这样做?你的用例是什么?我们也许可以一起提出更好的设计模式。
-
@davecom 用例是我需要一个键和值的字典。但我只想将值限制为字符串或布尔值。没有其他的。目标是最终使用此 Dictionary 转换为 JSON 格式。
标签: ios swift cocoa cocoa-touch