簡體   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