iOS*_*com 3 cocoa cocoa-touch ios swift
通常我会像这样创建我的swift字典:
var myDict: [String: String]
Run Code Online (Sandbox Code Playgroud)
但是,我如何创建一个可以包含值,只有String或Bool的Dictionary?
如果我像下面的代码一样声明字典
var myDict: [String: Any]
Run Code Online (Sandbox Code Playgroud)
然后我的数组现在能够容纳任何我不想要的对象.有没有办法声明Dictionary只接受String和Bool赋值类型?
[编辑] - 用例是:我需要有一个键和值的字典.但我只想将值限制为Strings或Bools.没有其他的.目标是最终使用此Dictionary转换为JSON格式以发送到某个服务器.基于下面的答案,我唯一的选择是枚举还是类/结构?我想知道是否有办法让Bool和String符合某些协议?
这个想法可能是这样声明字典
var myDict : [String: stringOrBool]
Run Code Online (Sandbox Code Playgroud)
并填写这样的字典
myDict["firstKeyStringValue"] = "my first string value" // This should work
myDict["firstKeyBoolValue"] = true // This should work
myDict["someOtherKey"] = 123 // This should fail
Run Code Online (Sandbox Code Playgroud)
编辑2 根据下面的答案,我选择了协议方法,因为它在语法上更容易.但正如鲶鱼在评论中提到的那样,它可能会占用更多的内存.
你可以做点什么
enum StuffThatGoesInMyDictionary {
case Text(String)
case Boolean(Bool)
}
Run Code Online (Sandbox Code Playgroud)
然后让你的字典成为
var myDict: [String : StuffThatGoesInMyDictionary]
Run Code Online (Sandbox Code Playgroud)
protocol StringOrBool {
}
extension Bool: StringOrBool {
}
extension String: StringOrBool {
}
var myDict: [String : StringOrBool] = [:]
myDict["testKey"] = "sd" // works
myDict["testKey2"] = false // works
myDict["testKey2"] = 2 // fails
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |