关键词:
我正在尝试实现一个与Codable
使用CodingKeys
枚举类似功能的协议。
使用Codable
和CodingKeys
,如果你没有在CodingKeys
枚举中为Codable
对象的每个属性实现一个案例,它会导致编译器错误,指出该对象不符合协议。
我查看了文档,我唯一能找到与Codable
(Encodable
和Decodable
)协议有关的东西是实现func encode(to encoder: Encoder)
和init(from decoder: Decoder)
函数的要求。
我得到的最接近的是如下定义协议:
protocol TestProtocol
associatedType Keys: CodingKey
这要求实现者具有符合Keys
的CodingKey
属性,但它不强制要求所有属性都有一个案例。此外,您不能像使用Keys
一样将Codable
属性声明为私有属性。
Codable
和CodingKeys
的处理程度是否高于通过API公开的程度?
如果没有,有没有办法在CodingKeys
之外实现Codable
功能?
你问两个问题。我会不按时回答。
Codable和CodingKeys的处理范围是否比通过API公开的更深层次?
是的,Swift编译器知道Encodable
,Decodable
和CodingKey
协议,并为它们提供特殊代码。
如果符合某些条件,编译器可以合成一个名为CodingKey
的enum
兼容的CodingKeys
,init(from:)
初始化器和encode(to:)
方法。条件在SE-0166中详细说明:
Encodable
和Decodable
要求也可以自动合成某些类型:
- 符合
Encodable
的类型,其属性都是Encodable
,获得自动生成的String
支持的CodingKey
enum
映射属性到案例名称。类似地,Decodable
类型的属性都是Decodable
- 落入(1)的类型 - 以及手动提供
CodingKey
enum
(直接命名为CodingKeys
,或通过typealias
)的类型,其案例按名称将1对1映射到Encodable
/Decodable
属性 - 自动合成init(from:)
和encode(to:)
as适当的,使用这些属性和键- 既不属于(1)也不属于(2)的类型必须提供自定义密钥类型(如果需要)并提供自己的
init(from:)
和encode(to:)
,视情况而定
请注意,除非依赖于编译器合成的一致性,否则CodingKey
兼容类型通常不必命名为CodingKeys
或甚至是enum
。
此外,请注意,如果依靠编译器合成CodingKeys
或CodingKey
,符合init(from:)
的encode(to:)
类型只需要为其封闭类型的每个成员都有一个案例。
如果你手动实现init(from:)
和encode(to:)
,你可以使用任何名称为你的CodingKey
兼容类型,它只需要你关心的案例。如果您只使用单值容器或无键容器进行存储,则甚至不需要符合CodingKey
的类型。
如果没有,有没有办法在Codable之外实现CodingKeys功能?
如果“功能”是指编译器自动合成实现的方式,那么唯一的方法是使用代码生成器(如Sourcery或gyb)生成源代码并将其提供给编译器。
如果,通过“功能”,你的意思是编译器需要封闭类型的每个Encodable
/ Decodable
成员的密钥成员的方式,那么唯一的方法是运行一个单独的程序来分析你的源代码和错误,如果有任何情况是失踪。你不能让标准的Swift编译器为你做这件事。
对于 Codable 结构,由于“私有”保护级别,“CodingKeys”不可访问
】对于Codable结构,由于“私有”保护级别,“CodingKeys”不可访问【英文标题】:\'CodingKeys\'isinaccessibledueto\'private\'protectionlevel,foraCodableStruct【发布时间】:2021-05-0323:57:04【问题描述】:我想检查打印语句是否打印“Key:messageTime... 查看详情
获取 CodingKeys 键值
】获取CodingKeys键值【英文标题】:GettheCodingKeyskeyvalue【发布时间】:2020-07-3119:17:21【问题描述】:在Swift中,使用Codable结构和CodingKeysemum,如果我有一个Coordinate对象,我怎样才能得到纬度和经度CodingKeys值,作为一个数组["1","2"]s... 查看详情
使用 Codable 解析 JSON 数据
...:typeMismatch(Swift.Dictionary,Swift.DecodingError.Context(codingPath:[CodingKeys(string 查看详情
使用 Codable 解析嵌套 JSON 数据问题
...JSON数据。但我对"route_polyline"field有疑问。问题:CodingKeys(stringValue:"route_polyline",intValue:n 查看详情
如何从 Swift Codable 中排除属性?
...些属性应该被编码,哪些应该被解码。我注意到从随附的CodingKeys枚举中排除该属性会 查看详情
swiftswift4中的codable(代码片段)
swiftapikit_codable.swift(代码片段)
swift公司的firestoreのrxswiftとの组み合わせ.codableも活用。(代码片段)
在 Swift 4 中使用 Decodable 和 CodingKeys 解析 JSON
】在Swift4中使用Decodable和CodingKeys解析JSON【英文标题】:ParsingJSONusingDecodableandCodingKeysinSwift4【发布时间】:2017-10-1822:40:18【问题描述】:我正在尝试解析从URL检索的大型JSON字符串。我用来测试的JSON如下:letjson=""""feed":"title":"Harr... 查看详情
swift之codable自定义解析将任意数据类型解析为想要的类型(代码片段)
...和解码不同的数据都是必不可少的。这就是为什么Swift的CodableAPI能成为Swift4.0的新功能一部分时,具有如 查看详情
codable发布这么久我就不学,摸鱼爽歪歪,哎~就是玩儿(代码片段)
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索HelloWorld杰少即可关注。写在开头祝天下所有伟大的母亲:节日快乐,身体健康,感谢您的付出,感谢您的仁爱!----写在母亲节当天... 查看详情
codable发布这么久我就不学,摸鱼爽歪歪,哎~就是玩儿(代码片段)
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索HelloWorld杰少即可关注。写在开头祝天下所有伟大的母亲:节日快乐,身体健康,感谢您的付出,感谢您的仁爱!----写在母亲节当天... 查看详情
Alamofire:具有额外属性的可编码对象
...在iOS上可能吗?为了符合Codable协议,我需要将它添加到CodingKeys枚举中,但如果我这样做了,它 查看详情
使用 Alamofire/Codable 解析 JSON 行
】使用Alamofire/Codable解析JSON行【英文标题】:ParsingJSONLineswithAlamofire/Codable【发布时间】:2018-03-0718:57:57【问题描述】:是否可以用Alamofire和codable解析JSON行?这是我现在的代码。Alamofire.request(url,method:.get,parameters:parameters,encoding:U... 查看详情
Swift 4 Decodable - 没有与键 CodingKeys 关联的值 [重复]
】Swift4Decodable-没有与键CodingKeys关联的值[重复]【英文标题】:Swift4Decodable-NovalueassociatedwithkeyCodingKeys[duplicate]【发布时间】:2019-08-2822:38:18【问题描述】:我正在我的Swift应用程序中解码JSON响应,并且代码在它决定停止工作之前... 查看详情
解码 JSON 时出错 - keyNotFound(CodingKeys
】解码JSON时出错-keyNotFound(CodingKeys【英文标题】:ErrorwhendecodingJSON-keyNotFound(CodingKeys【发布时间】:2018-11-1914:58:47【问题描述】:我正在尝试通过网络解析JSON数据。下面你可以看到魔法发生的地方。funcgetBookingsForDate(date:String,comp... 查看详情
使用 URLSession 和 Codable 解析 JSON 数据
】使用URLSession和Codable解析JSON数据【英文标题】:ParsingJSONdatawithURLSessionandCodable【发布时间】:2019-12-0212:13:42【问题描述】:我使用URLSession解析JSON并使用Codable映射它,但我无法在JSON数据中获取result数组以在表格视图中显示它... 查看详情
如何使用 Codable 和 Swift 解析这个嵌套的 JSON?
】如何使用Codable和Swift解析这个嵌套的JSON?【英文标题】:HowdoIparsethisnestedJSONusingCodablewithSwift?【发布时间】:2019-07-2109:15:07【问题描述】:我正在尝试使用Codable解析这个JSON:"users":["id":1,"name":"AllenCarslake","userName":"acarslake0","pro... 查看详情