ios - Codable 对象的 Swift 4 集合

标签 ios swift dictionary generics protocols

我有一个 Codable带有一个变量的类,该变量包含 String 的字典键和值可能是 String小号,Int s 或符合 Codable 的自定义结构.我的问题是:

如何定义值为 Codable 的字典?

我希望这就足够了

var data: [String: Codable] = [:]

但显然这使我的类不再符合 Codable .我认为这里的问题和我这里的一样,我传递的是协议(protocol)而不是受协议(protocol)约束的对象

Using JSON Encoder to encode a variable with Codable as type

所以大概我需要一个受约束的通用类型,比如 AnyObject<Codable>但这是不可能的。

编辑:回答

因此,由于无法按照已接受的答案完成此操作,因此我求助于一种包含每种数据类型的字典的结构

struct CodableData {
    var ints: [String: Int]
    var strings: [String: String]
    //...

    init() {
       ints = [:]
       strings = [:]
    }
}

var data = CodableData()

最佳答案

Swift 集合只包含一种类型,要使其成为 Codable,该类型就必须是 Codable——不是 Codable 类型,而是 Codable 协议(protocol)的采纳者。您需要这里的类型是某个一个特定的 Codable 采用者

因此,完成您所描述的事情的唯一方法基本上是发明一些新类型,StringOrIntOrStruct,它包装一个 String 或一个 Int 或一个结构,并且它本身采用 Codable。

但我认为您不会这样做,因为这种努力似乎不值得。基本上,您应该首先停止尝试使用异构 Swift 集合;这完全违背了语言的精神。从一开始就是难闻的气味。重新考虑您的目标。

关于ios - Codable 对象的 Swift 4 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45734612/

相关文章:

android - 当应用程序未运行(iphone/android)时,在远程触发器上创建(重复高音)警报,就像查找我的 iPhone 一样

ios - 如果让pngImageData = UIImageJPEGRepresentation(img !, 0.25),应用程序崩溃了

swift - 快速安装多个 Pod

python - "None"尝试在 Python 中返回 dict 的值时给出

python - 如何将项目添加到 OrderedDict

ios - 如何在Ionic/Cordova构建中正确引用iOS第三方框架,以免引发dyld:库未加载:@rpath错误

iOS 保存内购数据并应对越狱

iphone - 如何在 MKMapView 上绘制当前位置到所需位置之间的路线?

swift - 在 Userdefaults 错误快速中将文档路径保存在自定义结构数组中

ios - 在 iOS 中使用 SFPro 字体