【问题标题】:How do I use UserDefaults to control a custom object如何使用 UserDefaults 控制自定义对象
【发布时间】:2018-01-03 18:13:33
【问题描述】:

我正在尝试创建 2 个类,一个 Globals 类和一个 Calibration 类,以在整个应用程序运行时记住一个 Calibration 对象。换句话说,Calibration() 将被初始化并且 Globals() 将被初始化以在任何视图控制器中调用 Calibration 对象。它们都将在 HomepageController 的 viewDidLoad() 中初始化。 这是我的 Globals 课程:

class Globals: NSObject, NSCoding {
var aCalValue: Double;
var bCalValue: Double;
var cCalValue: Double;

required init (aValue: Double, bValue: Double, cValue: Double) {
    aCalValue = aValue;
    bCalValue = bValue;
    cCalValue = cValue;

    super.init()
}

required init?(coder aDecoder: NSCoder) {
    aCalValue = aDecoder.decodeObject(forKey: "aValue") as! Double
    bCalValue = aDecoder.decodeObject(forKey: "bValue") as! Double
    cCalValue = aDecoder.decodeObject(forKey: "cValue") as! Double
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(aCalValue, forKey: "aValue")
    aCoder.encode(bCalValue, forKey: "bValue")
    aCoder.encode(cCalValue, forKey: "cValue")
}
}

这是我的校准课:

class Calibration {

var a: Double
var b: Double
var c: Double
var user: Globals

init() {
}

func setAValue(a: Double) {
    self.a = a;
}

func setBValue(b: Double) {
    self.b = b;
}

func setCValue(c: Double) {
    self.c = c;
}

func getAValue() -> Double {
    return self.a
}

func getBValue() -> Double {
    return self.b
}

func getCValue() -> Double {
    return self.c
}

func initializeUser() {
    user = Globals(aValue: getAValue(), bValue: getBValue(), cValue: getCValue())
}
}

如何使用用户上次打开应用时输入的值来初始化这两个类?

【问题讨论】:

  • 编码/解码不起作用。您必须使用 decodeDouble(forKey:) 而不进行类型转换,因为就 NSCoding 而言,Double 不是对象。并删除所有分号。它们在 Swift 中是不需要的。

标签: ios swift nsuserdefaults nscoding


【解决方案1】:

类用户{

var token: String?

init(userDictionary: Dictionary<String, Any>) {
    token = userDictionary["token"] as? String
}

func toDictionary() -> Dictionary <String, Any> {
    var user : Dictionary <String, Any> = [:]
    user["token"] = token
    return user
}

func setAsCurrent() {
    UserDefaults.standard.set(toDictionary(), forKey: "Cureent User")
    UserDefaults.standard.synchronize()
}

static var current: User? {
    if let data = UserDefaults.standard.object(forKey: "Cureent User") as? Dictionary<String, Any> {
        return User(user: data)
    }
    return nil
}

}

【讨论】:

  • 好的答案不仅仅包含代码。它们至少包含对 (a) 问题的真正含义以及 (b) 代码如何解决问题的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多