Ios 如何在Swift 2.0中将结构保存为NSUserDefaults

Ios 如何在Swift 2.0中将结构保存为NSUserDefaults,ios,nsuserdefaults,swift2,Ios,Nsuserdefaults,Swift2,我有一个名为Jar的结构,我想将它们的数组保存到NSUserDefaults。下面是jar结构代码: struct Jar { let name: String let amount: Int init(name: String, amount: Int){ self.name = name self.amount = amount } } 我相信我需要将其转换为NSObject才能保存它。(因为无法将结构直接保存到NSUse

我有一个名为
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转换回结构数组。

要保存为用户默认值,您有两个选项:使对象符合NSCoding,或实现将其转换为NSDictionary或从NSDictionary转换为NSObject的方法,然后保存

大概是这样的:

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

我认为Swift字典和NSDictionary之间的自动衔接在这里会起作用,但我不确定。我的雨燕有点生锈了(

要保存为用户默认值,您有两个选项:使对象符合NSCoding,或实现将其转换为NSDictionary或从NSDictionary转换的方法,然后保存该方法

大概是这样的:

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

我认为Swift字典和NSDictionary之间的自动桥接在这里会起作用,但我不能肯定。我的Swift有点生锈了。(

此解决方案的灵感来自@Duncan C。我以更熟悉的方式编写它,就像我们在case自定义类编码和解码中所做的那样

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
  }

}
公共结构{
公共变量名:String?
公共风险价值金额:整数?
公共init(){
}
//解码
公共初始化(字典:字典){
名称=字典[“名称”]作为?字符串
金额=字典[“金额”]as?Int
}
//编码
public func encode()->字典{
var dictionary:dictionary=dictionary()
字典[“名称”]=名称
字典[“金额”]=金额
返回字典
}
}

此解决方案的灵感来自@Duncan C。我以更熟悉的方式编写它,就像我们在case自定义类编码和解码中所做的那样

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
  }

}
公共结构{
公共变量名:String?
公共风险价值金额:整数?
公共init(){
}
//解码
公共初始化(字典:字典){
名称=字典[“名称”]作为?字符串
金额=字典[“金额”]as?Int
}
//编码
public func encode()->字典{
var dictionary:dictionary=dictionary()
字典[“名称”]=名称
字典[“金额”]=金额
返回字典
}
}

首先,在NSUserDefaults中存储这样的数据并不是真正的目的,但如果您必须查看NSKeyedArchiver,您建议我使用什么?核心数据?是的,核心数据是一个更好的系统好的,我可以在核心数据中存储结构吗?不是直接存储。您将需要使用NSManagedObject子类。Xcode可以生成用于创建的所有代码首先,在NSUserDefaults中存储这样的数据并不是真正的目的,但如果你必须查看NSKeyedArchiver,你建议我使用什么?核心数据?是的,核心数据是一个更好的系统好的,我可以在核心数据中存储结构吗?不是直接的。你需要使用NSManagedObject子系统class.Xcode可以生成用于创建此对象的所有代码,然后您可以使用它来代替结构。非类类型“”不能符合类协议“NSCoding”非类类型“”不能符合类协议“NSCoding”您能告诉我如何使用它将结构转换为字典并将字典转换为结构吗?可以吗告诉我如何使用它将struct转换为dictionary和dictionary转换为struct?