我正在将Swift用于iOS应用。
我需要将DateComponents对象存储为CloudKit中的字段。
我该怎么做?
到目前为止,我认为我需要将CloudKit字段设置为Bytes,然后将DateComponents对象转换为Data对象。查看Data类的文档,我不知道如何初始化Data对象。我不知道如何使用初始化程序之一中使用的UnsafeBufferPointer。
以下代码给出了运行时错误:
newRecord.setObject((dateComponents as! __CKRecordObjCValue), forKey: DatabaseNameStrings.fieldTime)
这是调试窗口中的运行时错误消息:
无法将类型'NSDateComponents'(0x1d04208c8)的值强制转换为'__C.CKRecordValue'(0x1d0420ab0)。
我还需要将数据转换为DateComponents。 Data和DateComponents类均符合Codable协议,该协议继承了Decoder协议。 DateComponents的初始化程序之一是:
init(from: Decoder)
这使我怀疑在从Bytes类型的CloudKit字段中获取Data对象之后,有一种方法可以使用该init将Data类型转换为DateComponents。
以下代码:
if let data = privateRecord.object(forKey: DatabaseNameStrings.fieldTime) as? Data {
let dateComponents = DateComponents(from: data) // error here
}
在Xcode编辑器中生成一个错误,内容为:
参数类型“数据”与预期的类型“解码器”不符
我认为,由于Data和DateComponents均符合Decoder协议,因此代码可以正常工作。
答案 0 :(得分:1)
似乎您可能对此进行了过度设计。您可以考虑以下几种选择:
只是一个想法。祝好运。 :)