StructArchiver 0.0.7

StructArchiver 0.0.7

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最新发布2016年8月
SPM支持 SPM

naru 维护。



  • 作者:
  • naru-jpn

Struct Archiver

将结构体和基本值存档到 NSData 中并解档。

特性

  • [x] 存档/解档基本值
  • [x] 存档/解档自定义结构值

要求

  • iOS 8.0+
  • Xcode 7.3+

通信

  • 如果您 发现了一个错误,请打开一个问题。
  • 如果您 有功能请求,请打开一个问题。
  • 如果您 想要贡献,请提交一个 pull request。

安装

( Swift Packege Manager )

(激活)

在存档/解档之前,需要按照以下方式激活 Archiver。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // Activate StructArchiver
    StructArchiver.activateStandardArchivables(withCustomStructActivations: {
        // Add activation if you create customArchivable struct 
    })

    // ...

    return true
}

(使用方式)

存档/解档基本值

您可以将值存档为符合 Archivable 协议的类型,并通过传递存档数据到存档器来解档数据。

    // Int
    let archivedInt: Int = -2016
    let archivedIntData: NSData = archivedInt.archivedData
    let unarchiveInt = Archiver.unarchive(data: archivedIntData) // -2016

    // Double
    let archivedDouble: Double = 2.016
    let archivedDoubleData: NSData = archivedDouble.archivedData
    let unarchivedDouble = Archiver.unarchive(data: archivedDoubleData) // 2016

    // String
    let archivedString: String = "archiving..."
    let archivedStringData: NSData = archivedString.archivedData
    let unarchiveString = Archiver.unarchive(data: archivedStringData) // "archiving..."

可以存档的值类型

Int, UInt, Float, Double, String, [Archibavle], [String: Archibavle]

存档/解档自定义结构值

1. 定义 CustomArchivable 结构体

计算属性 restoreProcedure 返回一个闭包,将字典转换为结构体。字典包含属性的值。

struct SampleStruct: CustomArchivable {

    // Archived values need to conform Archivable protocol.
    let title: String
    let timestamp: Double

    // Return closure to convert dictionary into struct
    public static var restoreProcedure: ArchiveRestoreProcedure {
        return { (dictionary: ArchivableDictionary) in
            if let title = dictionary["title"] as? String, let timestamp = dictionary["timestamp"] as? Double {
                return SampleStruct(title: title, timestamp: timestamp)
            }
            return SampleStruct(title: "", timestamp: 0.0)
        }
    }
}

2. 添加激活

StructArchiver.activateStandardArchivables(withCustomStructActivations: {
    SampleStruct.activateArchive()
})

3. 存档/解档

基本值的存档/解档方式相同。

let archivedStruct: SampleStruct = SampleStruct(title: title, timestamp: timestamp)
// Archive
let archivedStructData: NSData = archivedStruct.archivedData
// Unarchive
let unarchivedStruct = Archiver.unarchive(data: archivedStructData)

存档/解档复杂值

您可以存档包含可存档值数组和字典。

let archivedStruct1: SampleStruct = SampleStruct(title: title1, timestamp: timestamp1)
let archivedStruct2: SampleStruct = SampleStruct(title: title2, timestamp: timestamp2)
let archivedStruct3: SampleStruct = SampleStruct(title: title3, timestamp: timestamp3)

let archivedStructs: Archivables = [archivedStruct1, archivedStruct2, archivedStruct3]

// Archive
let archivedStructsData: NSData = archivedStructs.archivedData
// Unarchive
let unarchivedStructs = Archiver.unarchive(data: archivedStructsData)

查看示例项目。

许可协议

MIT