【问题标题】:How to save struct to NSUserDefaults in Swift 2.0如何在 Swift 2.0 中将结构保存到 NSUserDefaults
【发布时间】:2015-09-19 23:47:55
【问题描述】:

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

【问题讨论】:

  • 首先,在 NSUserDefaults 中存储这样的数据并不是真正的用途,但是如果您必须查看 NSKeyedArchiver。
  • 你建议我用什么?核心数据?
  • 是的,Core Data 是一个更好的系统
  • 好的,我可以在核心数据中存储一个结构吗?
  • 不是直接的。您将需要使用 NSManagedObject 子类。 Xcode 可以生成用于创建此对象的所有代码,然后您可以使用它来代替您的结构。

标签: ios nsuserdefaults swift2


【解决方案1】:

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

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
  }

}

【讨论】:

  • 你能告诉我如何使用它来将结构转换为字典和字典到结构吗?
【解决方案2】:

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

类似这样的:

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

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

【讨论】:

  • 非类类型“”不能符合类协议“NSCoding”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多