복붙노트

[SWIFT] 스위프트 4 JSON Codable는 - 반환 값은 때때로 객체, 다른 배열입니다

SWIFT

스위프트 4 JSON Codable는 - 반환 값은 때때로 객체, 다른 배열입니다

해결법


  1. 1.당신은 예를 들어 관련 값으로 열거 (문자열이 경우 배열)를 사용하여 결과의 ​​모호성을 캡슐화 있습니다

    당신은 예를 들어 관련 값으로 열거 (문자열이 경우 배열)를 사용하여 결과의 ​​모호성을 캡슐화 있습니다

    enum MetadataType: Codable {
        case array([String])
        case string(String)
    
        init(from decoder: Decoder) throws {
            let container = try decoder.singleValueContainer()
            do {
                self = try .array(container.decode(Array.self))
            } catch DecodingError.typeMismatch {
                do {
                    self = try .string(container.decode(String.self))
                } catch DecodingError.typeMismatch {
                    throw DecodingError.typeMismatch(MetadataType.self, DecodingError.Context(codingPath: decoder.codingPath, debugDescription: "Encoded payload not of an expected type"))
                }
            }
        }
    
        func encode(to encoder: Encoder) throws {
            var container = encoder.singleValueContainer()
            switch self {
            case .array(let array):
                try container.encode(array)
            case .string(let string):
                try container.encode(string)
            }
        }
    }
    
    struct Hotel: Codable {
        let firstFloor: Room
    
        struct Room: Codable {
            var room: MetadataType
        }
    }
    
  2. from https://stackoverflow.com/questions/48739760/swift-4-json-codable-value-returned-is-sometimes-an-object-others-an-array by cc-by-sa and MIT license