Codable プロトコルを使用して、Api 応答を迅速な構造体にマップするモデルを作成しました。しかし、常に nil を返します。注: - モデルから isSelected を削除すると、完全に機能します。しかし、ユーザーからの選択を管理するには、このキーが必要です。また、クラスでこのアプローチを試みると、常に self is immutable エラーが返されます。この問題に直面した人もいますか?このコードを迅速なクラスに変換するのを手伝ってください
struct CustomCodingKey:CodingKey {
var stringValue: String
var intValue: Int?
init?(stringValue: String) {
self.stringValue = stringValue
self.intValue = nil
}
init?(intValue: Int) {
self.stringValue = String(intValue)
self.intValue = intValue
}
}
struct Field: Codable {
var type: String
var label: String
var name: String
var isSelected = false
init?(json: JSON) {
do {
let data = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
let decoder = JSONDecoder.init()
decoder.keyDecodingStrategy = .custom { keys -> CodingKey in
let key = keys.last!.stringValue.split(separator: "-").joined()
print(key)
return CustomCodingKey(stringValue: String(key))!
}
self = try decoder.decode(Field.self, from: data)
} catch {
return nil
}
}
var json: JSON {
do {
let data = try JSONEncoder().encode(self)
if let tempJson = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? JSON {
return tempJson
}
return JSON()
} catch {
return JSON()
}
}
}