Как сохранить массив ответов сервера в UserDefaults для последующего использования в Swift? - PullRequest
0 голосов
/ 03 февраля 2019

когда пользователь входит в систему, я получаю ответ от сервера, который содержит массив, подобный этому:

{"answer":{"id":26,"username":"iosuser","address":"iosios","phone_number":"123123123","email":"gmail@gmail.com","created_at":"2019-02-02 12:42:50","updated_at":"2019-02-02 21:40:29","provider_id":"1","is_loged_in":1,"user_id":"24","user_type":1}}

Как сохранить данные этого массива в userdefaults и использовать их позже, например, на странице профиля?

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 03 февраля 2019

Во-первых, не рекомендуется сохранять его в userDefault, вы можете использовать coredata / realm, а ваш контент - это словарь, содержащий массив, но вы можете сделать

struct Root: Codable {
    let answer: Answer
}

struct Answer: Codable {
    let id: Int
    let username, address, phoneNumber, email: String
    let createdAt, updatedAt, providerID: String
    let isLogedIn: Int
    let userID: String
    let userType: Int

    enum CodingKeys: String, CodingKey {
        case id, username, address
        case phoneNumber = "phone_number"
        case email
        case createdAt = "created_at"
        case updatedAt = "updated_at"
        case providerID = "provider_id"
        case isLogedIn = "is_loged_in"
        case userID = "user_id"
        case userType = "user_type"
    }
}


UserDefaults.standard.set(data,forKey:"AnyKey")

, затем прочитать данные и

let res = try? JSONDecoder().decode(Root.self,from:data)

если вам нужно удалить массив только тогда

do {
  let tr = try JSONSerialization.jsonObject(with:data) as! [String:Any]
  let arr = tr["answer"] as! [Any]
  let ansData = try JSONSerialization.data(withJSONObject:arr, options:[]) 
  UserDefaults.standard.set(ansData,forKey:"AnyKey")
} catch { print(error) }

После этого прочитайте его как

 guard let data = UserDefaults.standard.data(forKey:"AnyKey") else { return }
 let res = try? JSONDecoder().decode([Answer].self,from:data)
...