我在Swift中有关注结构
struct SerializableRequest {
var r: Int
var m: String
var d: String
var b: [UInt8]
}然后我创建了一个struct的实例:
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")]
)如何使用https://github.com/myfreeweb/SwiftCBOR进行模式匹配来获取结构
发布于 2020-03-12 02:27:25
我读过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枚举,检查每一项的位置并尝试解码值(因为我期望在第一个位置是字符串)。此外,您还可以使用CodableCBORDecoder、check this out
发布于 2021-07-03 21:26:37
试试这个简单的例子
import Foundation
import SwiftCBOR
struct S: Codable {
let integer: Int
let string: String
let byteArray: [UInt8]
}
let s1 = S(integer: 1, string: "Hello, World", byteArray: [1,2,255])
do {
let encoder = CodableCBOREncoder()
// encoded Data
let data = try encoder.encode(s1)
let decoder = CodableCBORDecoder()
// decoded S
let s2 = try decoder.decode(S.self, from: data)
print(s2)
// S(integer: 1, string: "Hello, World", byteArray: [1, 2, 255])
} catch {
print(error)
}https://stackoverflow.com/questions/60641753
复制相似问题