【问题标题】:Archiving and Unarchiving in Swift 3.0Swift 3.0 中的归档和取消归档
【发布时间】:2017-07-21 23:46:11
【问题描述】:

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

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

  1. enum(我用rawValue存档。)

  2. struct(我读到了 extension 方法将其归档到 http://swiftandpainless.com/nscoding-and-swift-structs/)。还有其他方法吗?

  3. Array

由于array 也是struct,因此它还必须遵循与struct 相同的归档约定。但我能够归档基本数据类型的array,例如。 String, Int 等直接。即

let arr = ["1", "2"],直接存档,不带任何extension

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

  1. Set

  2. Dictionary

【问题讨论】:

    标签: ios struct enums swift3 nsarchiving


    【解决方案1】:

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

    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 季”那样的空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多