gpt4 book ai didi

swift - 如何从 MongoDB 存储和检索 Swift Data 或 NSData?

转载 作者:行者123 更新时间:2023-11-30 12:52:33 24 4
gpt4 key购买 nike

我想在 MongoDB 中存储数据对象:

它是使用 CryptoSwift 创建的

let bytes = dataString.utf8.map({$0})
let encrypted = try! ChaCha20(key: getAESP(), iv: "zzzzzzzzzzzzzz").encrypt(bytes)
let encryptedData = Data(bytes: encrypted)

并使用 NSURLSession 发送到服务器:

let postData = NSMutableData(data: "patient_id=\(patientID)".data(using: String.Encoding.utf8)!)
postData.append("&data=".data(using: String.Encoding.utf8)!)
postData.append(encryptedData)
let request = NSMutableURLRequest(url: NSURL(string: "\(url)api/patient/document")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)

在我的模型方案中,我将数据描述为缓冲区:

var DocumentSchema1 = new Schema({
created_at:Date,
created_by:String,
document_type:String,
document_name:String,
data: Buffer,
modifications: [
{
modified_by: String,
modified_at: Date,
data: Buffer
}
],
isDeleted: Boolean,
deleted_at: String,
deleted_by: String,
})

这种方法的问题在于,从 Web 服务返回的 JSON 是一种缓冲区而不是数据,并且下面的 Swift 条件永远不会被执行。

  if let dataString = dict["data"] as? Data{

问题是如何从 Mongo 获取二进制数据并在 Swift 中使用它?

编辑2:基于zaph的答案:因此数据为 __NSArrayI,元素为 Int64(35)我可以转换的唯一方法是 Array<AnyObject>但我无法将其转换为这种形式的数据。

尝试将其转换到:

  • Array<Int64>
  • [UInt64]
  • [UInt8]
  • [Int64]
  • 不安全RawPointer

失败。

 if let a = dataDict["data"] as? Array<Int64> 

最佳答案

假设 dataString 是一个命名错误的字节数组:

let dataString :[UInt8] = [0x41, 0x42, 0x43, 0x44]
print("dataString: \(dataString)")
let data = Data(bytes:dataString, count:4)
print("data: \(data)")
print("data as hexadecimal: \(data.map { String(format: "%02hhx", $0) }.joined())")

Output:

dataString: [65, 66, 67, 68]
data: 4 bytes
data as hexadecimal: 41424344

关于swift - 如何从 MongoDB 存储和检索 Swift Data 或 NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40789266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com