繁体   English   中英

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

[英]How to save struct to NSUserDefaults in Swift 2.0

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

该解决方案的灵感来自@DuncanC。我编写了一种更熟悉的方法,就像在定制类编码和解码的情况下一样。

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
  }

}

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

像这样:

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

我认为Swift字典和NSDictionary之间的自动桥接可以在这里工作,但我并不乐观。 我的速度有点生锈了。 :(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM