Развернуть CBOR декодированные данные в Swift - PullRequest
0 голосов
/ 11 марта 2020

У меня есть следующая структура в Swift

struct SerializableRequest {        
  var r: Int
  var m: String
  var d: String
  var b: [UInt8]
}

Затем я создаю экземпляр структуры:

SerializableRequest(r: 1, m: "c", d:"l", b: [42, 24] ) 

и кодирую ее, используя CBOR, который дает: [164, 97, 109 , 97, 99, 97, 98, 66, 42, 24, 97, 100, 97, 108, 97, 114, 1]

Теперь я хочу снова декодировать его обратно в Struct, используя указанный выше байтовый массив, но при декодировании выдает результат

([SwiftCBOR.CBOR.utf8String("d"): SwiftCBOR.CBOR.utf8String("l"), 
  SwiftCBOR.CBOR.utf8String("r"): SwiftCBOR.CBOR.unsignedInt(1), 
  SwiftCBOR.CBOR.utf8String("b"): SwiftCBOR.CBOR.byteString([42, 24]), 
  SwiftCBOR.CBOR.utf8String("m"): SwiftCBOR.CBOR.utf8String("c")]
)

Как можно получить Struct, используя PATTERN MATCHING, используя https://github.com/myfreeweb/SwiftCBOR

1 Ответ

0 голосов
/ 11 марта 2020

Я прочитал документы SwiftCBOR, и я полагаю, что вы можете использовать его следующим образом:

struct SerializableRequest {
    var r: Int
    var m: String
    var d: String
    var b: [UInt8]

    init(cborArr: [CBOR]) {

        for (i, val) in cborArr.enumerated() {
            if i == 0 {
               //
            } else if i == 1 {
                if case let CBOR.utf8String(string) = val {
                    m = string
                }
            } else if (i == 2) {
                // and so on
            }
        }
    }
}

, как вы можете видеть выше, я знаю, что в первой позиции есть строка, поэтому я перечисляю через cborArr, проверяет позицию каждого элемента и пытается декодировать значение (потому что я ожидаю, что на 1 позиции будет String). Кроме того, вы можете использовать CodableCBORDecoder, проверить это

...