Swift UserDefaults получить значения из массива - PullRequest
0 голосов
/ 05 мая 2018

У меня есть UserDefaults массив как:

let userValue = ["name": self.nameLbl.text ?? "", "lastName": self.lastNameLbl.text ?? "", "city": cityLbl.text ?? ""] as! [String : String]
var userArray = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []
userArray.append(userValue)
UserDefaults.standard.set(userArray, forKey: "userInfo")

Как получить пример значений ключа для печати типа

[["name": .., "lastName":..,],["name": .., "lastName":..,],["name": .., "lastName":..,]...]

Если я напечатаю так:

if let array = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] {
    for dictionary in array {
        print(dictionary["name"])
        print(dictionary["lastName"])
        print(dictionary["city"])
    }
}

в консоли get:

Lars James Ulrich Hetfield Gentofte California

Я хочу это так: [[ Lars, Ulrich,Gentofte],[James, Hetfield, California]]

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Вы должны добавить пару key-value в массив, а затем распечатать массив. Вы получите ожидаемый ответ

let userValue = ["name": self.nameLbl.text ?? "", "lastName": self.lastNameLbl.text ?? "", "city": cityLbl.text ?? ""] as! [String : String]
        var userArray = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []

        // Appending the different -2 userValue to userArray
        userArray.append(userValue)
        userArray.append(userValue)

        UserDefaults.standard.set(userArray, forKey: "userInfo")

        if let array = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] {

       var dataValues = Array<Any>()
       array.forEach { (object) in
       dataValues.append(Array(object.values))
      }
    print(dataValues)

 }

Здесь вы можете проверить демо:

let userValue = ["name": "j", "lastName":  "o", "city":  "g"] as! [String : String]

// Appending the different -2 userValue to userArray
var a = [userValue, userValue, userValue]

var b = Array<Any>()
a.forEach { (object) in
    b.append(Array(object.values))
}
print(b)
0 голосов
/ 05 мая 2018

Чтобы добавить пару key-value в существующий массив, вам просто нужно добавить userValue к вашему массиву. Как:

    let userValue = ["name": self.nameLbl.text ?? "", "lastName": self.lastNameLbl.text ?? "", "city": cityLbl.text ?? ""] as! [String : String]
    var userArray = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] ?? []

    // Append the userValue to userArray
    userArray.append(userValue)

    UserDefaults.standard.set(userArray, forKey: "userInfo")

Чтобы извлечь dictionary из массива, вы можете использовать

    if let array = UserDefaults.standard.array(forKey: "userInfo") as? [[String: String]] {
        for dictionary in array {
            print(dictionary["name"])
            print(dictionary["lastName"])
            print(dictionary["city"])
        }
    }
...