Benjamin Sloutsky
Benjamin Sloutsky

Reputation: 122

How can I save an array of Double in UserDefaults?

How can I save an array of Double in UserDefaults?

How come my UserDefaults evaluate to nil?

print(UserDefaults.standard.object(forKey: "num")!)
if var o = UserDefaults.standard.object(forKey: "num") as? [Double] {
    o.insert(Double(self.slid), at: 0)
    print("opa \(o)")
    UserDefaults.standard.removeObject(forKey: "num")
    UserDefaults.standard.set(o, forKey: "num")
    if let z = UserDefaults.standard.object(forKey: "num") {
        print(z)
    }
} else {
    UserDefaults.standard.set(Double(self.slid), forKey: "num")
    if let z = UserDefaults.standard.object(forKey: "num") {
        print("kl \(z)")
    } else {
        print("nilo")
    }
}

Upvotes: 1

Views: 504

Answers (1)

Frankenstein
Frankenstein

Reputation: 16361

You should be setting the value initially as an array of double [Double] instead of just a single Double. Modify to the below line:

UserDefaults.standard.set(Double(self.slid), forKey: "num")

To:

UserDefaults.standard.set([Double(self.slid)], forKey: "num")

Here is the complete code you'll need:

if var array = UserDefaults.standard.object(forKey: "num") as? [Double] {
    array.insert(Double(self.slid), at: 0)
    UserDefaults.standard.set(array, forKey: "num")
} else {
    UserDefaults.standard.set([Double(self.slid)], forKey: "num")
}
print(UserDefaults.standard.object(forKey: "num"))

Upvotes: 1

Related Questions