0

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()
            }

        }
    }
4

0 に答える 0