如何将结构保存到Swift 2.0中的NSUserDefaults

我有一个名为Jar的结构,我想将它们的数组保存到NSUserDefaults。 这里是jar结构代码:

 struct Jar { let name: String let amount: Int init(name: String, amount: Int){ self.name = name self.amount = amount } } 

我相信,我将需要将其转换为一个NSObject能够保存它。 (因为你不能直接保存一个结构到NSUserDefaults)。 我的问题是: 如何将结构数组转换为NSObject? 以及如何将NSObject转换回结构数组。

这个解决scheme的灵感来自于@Duncan C.我写了它更熟悉的方式,就像我们在Custom Class编码和解码的情况下一样。

 public struct IRDriver { public var name: String? public var amount: Int? public init() { } // Decode public init(dictionary: Dictionary<String, AnyObject>){ name = dictionary["name"] as? String amount = dictionary["amount"] as? Int } // Encode public func encode() -> Dictionary<String, AnyObject> { var dictionary : Dictionary = Dictionary<String, AnyObject>() dictionary["name"] = name dictionary["amount"] = amount return dictionary } } 

为了保存到用户的默认值,你有两个select:让对象符合NSCoding,或实现将其转换为/从NSDictionary的方法,并保存。

像这样的东西:

 func dictionaryFromJar() -> NSDictionary { let dictionary: [AnyObject: AnyObject] = ["name": name, "amount": amount] return dictionary } 

我认为在Swift词典和NSDictionary之间的自动桥接将在这里工作,但我不积极。 我的敏捷正在生锈。 🙁