给出以下可编码的struct
:
struct MyBanana: Codable {
var b: String?
var z: String?
enum CodingKeys: String, CodingKey {
case b = "B"
case z = "ZOOM"
}
}
我如何获得像这样的字符串数组:["B", "ZOOM"]
而没有MyBanana
的实例?
此外,还有一种方法可以从自动合成的CodingKeys
中获取此信息,例如
struct MyBanana: Codable {
var b: String?
var z: String?
}
将返回["b","z"]
对于第一个问题,我尝试了以下操作:
func whatever<T, Key>(keyedBy: Key.Type) -> [T] where T: Codable, Key: CodingKey
{
let allKeys: [Key] = [Key]()
for k in keyedBy {
allKeys.append(k)
}
return [T]()
}
但是我得到
类型'Key.Type'不符合协议'序列'
答案 0 :(得分:2)
struct MyBanana: Codable {
var b: String?
var z: String?
enum CodingKeys: String, CodingKey, CaseIterable {
case b = "B"
case z = "ZOOM"
}
static var allCases: [String] {
return CodingKeys.allCases.map { $0.rawValue }
}
}
然后您可以将编码键数组作为
MyBanana.allCases
但是不适用于自动合成的编码键