ios – 在Swift中将结构序列化为NSData

ios – 在Swift中将结构序列化为NSData,第1张

概述我需要将 Swift结构保存到NSData.我无法符合NSCoding,因为它只适用于NSObject的子类. 我在Swift 2.0中编写了一个带有扩展的小协议,似乎可以在Playground中运行.这似乎有点太容易了. 这里有什么东西我不见了吗? 以下代码可以在Xcode 7 Beta 5的 *** 场上运行. //: Playground - noun: a place where people c 我需要将 Swift结构保存到NSData.我无法符合NSCoding,因为它只适用于NSObject的子类.

我在Swift 2.0中编写了一个带有扩展的小协议,似乎可以在Playground中运行.这似乎有点太容易了.

这里有什么东西我不见了吗?

以下代码可以在Xcode 7 Beta 5的 *** 场上运行.

//: Playground - noun: a place where people can play import UIKitprotocol Serializable {    init?(encodedData: NSData)    var encodedData: NSData { get }}extension Serializable {    var encodedData: NSData {        var pointer = self        return NSData(bytes: &pointer,length: sizeof(Self.self))    }    init?(encodedData data: NSData) {        guard            data.length == sizeof(Self.self)            else { return nil }        self = UnsafePointer(data.bytes).memory    }}struct Test: customstringconvertible,Serializable {    let message: String    let people: [String]    let color: UIcolor    var description: String {        return "\(message) + \(people) + \(color)"    }}let structToEncode = Test(message: "Hi!",people: ["me","someone else"],color: UIcolor(red: 0.5,green: 0.2,blue: 0.1,Alpha: 0.4))let encodedData = structToEncode.encodedDatalet decodedStruct = Test(encodedData: encodedData)
解决方法 我一直在寻找Swift的序列化解决方案.不要发明自己的协议,而是看看RawRepresentable.它比你在这里做的更通用,因为它不依赖于NSData.只要您的类型在RawValue类型别名中指定它,您就可以序列化为任何内容. 总结

以上是内存溢出为你收集整理的ios – 在Swift中将结构序列化为NSData全部内容,希望文章能够帮你解决ios – 在Swift中将结构序列化为NSData所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1027319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存