我在 swift 3.0 中有关于存档和取消存档数据的问题。
我阅读了一些相同的帖子,但仍然没有完全清楚某些情况。
enum
(我使用rawValue
对其进行归档。)
struct
(我在http://swiftandpainless.com/nscoding-and-swift-structs/中了解了将extension
方法归档的方法)。还有其他办法吗?
Array
由于array
也是struct
,因此它也必须遵循与struct
相同的归档惯例。但我能够存档array
基本数据类型,例如。直接String, Int
等。即。
let arr = ["1", "2"]
,直接归档,没有任何extension
。
另外,它如何在array of custom objects
?
Set
Dictionary
答案 0 :(得分:0)
我遇到了同样的问题,并为我的结构找到了这个解决方案:
struct Series {
var name: String?
var season: String?
var episode: String?
init(name: String?, season: String?, episode: String?) {
self.name = name
self.season = season
self.episode = episode
}
static func archive(w: Series) -> Data {
var fw = w
return Data(bytes: &fw, count: MemoryLayout<Series>.stride)
}
static func unarchive(d: Data) -> Series {
guard d.count == MemoryLayout<Series>.stride else {
fatalError("Error!")
}
var w: Series?
d.withUnsafeBytes({(bytes: UnsafePointer<Series>) -> Void in
w = UnsafePointer<Series>(bytes).pointee
})
return w!
}
}
我可以这样称呼归档:
var series = [Series]()
let arcData = Series.archive(w: series[0])
和这样的unarchiver:
var seriesItems = [Data]()
let unarcData = [Series.unarchive(d: seriesItems[0])]
但是当我输入带有空格的名称时,应用程序崩溃了。我不是没有原因,因为在季节和剧集的情况下,也有“第1季”的空间。