0

我在swift 3.0中对归档取消归档数据有一些问题。

我阅读了一些相同的帖子,但对于某些情况仍然没有完全清楚。

  1. enum(我曾经rawValue存档过。)

  2. struct(我在http://swiftandpainless.com/nscoding-and-swift-structs/中了解了extension归档它的方法)。还有其他方法吗?

  3. Array

由于array也是 a struct,所以它也必须遵循与 a 相同的归档约定struct。但我能够归档一个array基本数据类型,例如。String, Int等直接。IE

let arr = ["1", "2"], 直接存档,没有任何extension.

另外,它是如何工作的array of custom objects

  1. Set

  2. Dictionary

4

1 回答 1

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])

和这样的解压器:

var seriesItems = [Data]()
let unarcData = [Series.unarchive(d: seriesItems[0])]

但是当我输入带有空格的名称时,应用程序崩溃了。我不知道为什么,因为在季节和情节的情况下,也有像“第 1 季”那样的空格。

于 2017-05-23T15:38:40.027 回答