Swift 如何将自定义对象转换为数据格式
我有一个自定义结构,它的属性类型是其他不可编码类型的结构。它是structs中的一个复杂的结构树,我需要将它转换为数据以便保存它 我需要保存此结构(聊天) 序列化是最好的方式吗,就像在这篇文章中一样Swift 如何将自定义对象转换为数据格式,swift,codable,Swift,Codable,我有一个自定义结构,它的属性类型是其他不可编码类型的结构。它是structs中的一个复杂的结构树,我需要将它转换为数据以便保存它 我需要保存此结构(聊天) 序列化是最好的方式吗,就像在这篇文章中一样 我尝试过遵从Codable,但它给出了一个错误,说它不符合,由于类型的原因,这是预期的。请发布对象的代码和您尝试的内容内部结构也应符合codable我刚刚更新了它,以便您可以看到内部结构-它们包含非简单类型,这意味着结构不能符合codable,例如,MKMapSnapshot forMKMapSna
我尝试过遵从Codable,但它给出了一个错误,说它不符合,由于类型的原因,这是预期的。请发布对象的代码和您尝试的内容内部结构也应符合codable我刚刚更新了它,以便您可以看到内部结构-它们包含非简单类型,这意味着结构不能符合codable,例如,MKMapSnapshot for
MKMapSnapshot
:您需要为每个部件提供一种从(NS)数据保存/检索/初始化它们的方法。首先处理每个困难的对象,然后再处理整个对象。好的,这只是一个示例,我不想手动进入整个结构中使用的每个类型并转换为NSData。是否没有办法通过序列化将整个内容直接转换为数据,或者我应该创建一个只有可编码类型的新结构并保存它。
struct Chat{
var dictOfRecentMessages:[String:Message] = [:]
var matchPicture:UIImage?
var metadata:JSON?
}
struct Message{
let messageID:String
var chatID:String
let whoSent:String
let timeTriedToSend:Int
var messageString:String?
var image:ImageMessage?
var video:VideoMessage?
var location:LocationMessage?
let status:String
}
struct ImageMessage{
var uiImage:UIImage?
var imageURL:String?
var imageSize:CGSize?
}
struct VideoMessage{
var video:NSURL?
var videoURL:String?
}
struct LocationMessage{
var clLocation:CLLocation?
var mapCamera:MKMapCamera?
var mapSnapshot:MKMapSnapshot?
}