Ios 在Swift 3.0中存档和取消存档

Ios 在Swift 3.0中存档和取消存档,ios,struct,enums,swift3,nsarchiving,Ios,Struct,Enums,Swift3,Nsarchiving,我在swift 3.0中的存档和取消存档数据方面遇到一些问题 我读了一些关于同样情况的帖子,但对一些案例仍然不完全清楚 enum(我使用rawValue将其存档。) struct(我读到了将其归档的扩展方法)。还有别的办法吗 数组 由于数组也是一个结构,因此它还必须遵循与结构相同的归档约定。但是我能够直接归档基本数据类型的数组,例如字符串、Int等。i、 e 让arr=[“1”,“2”]直接存档,无需任何扩展名 另外,它如何在自定义对象的数组中工作 Set 字典 我也遇到同样的问题,并为我的结构

我在swift 3.0中的存档取消存档数据方面遇到一些问题

我读了一些关于同样情况的帖子,但对一些案例仍然不完全清楚

  • enum
    (我使用
    rawValue
    将其存档。)

  • struct
    (我读到了将其归档的
    扩展方法)。还有别的办法吗

  • 数组

  • 由于
    数组
    也是一个
    结构
    ,因此它还必须遵循与
    结构
    相同的归档约定。但是我能够直接归档基本数据类型的
    数组
    ,例如
    字符串、Int
    等。i、 e

    让arr=[“1”,“2”]
    直接存档,无需任何
    扩展名

    另外,它如何在自定义对象的
    数组中工作

  • Set

  • 字典


  • 我也遇到同样的问题,并为我的结构找到了此解决方案:

    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季”的空间