Как правильно передать данные JSON с декодируемой структурой в UserDefaults - PullRequest
0 голосов
/ 18 января 2019

Я студент и пытаюсь получить данные Json с сервера Http, а после этого сохранить их, используя UserDefaults

Я видел несколько примеров, и этот код, который я сделал, казалось, имел смысл, хотя он не работал

Это моя структура, которую я использую для декодирования данных json

struct UserLogged : Decodable {
    var token: String
    var userId: String
}

И этот код я пытаюсь использовать

guard let baseUrl = URL(string: "http://LOCALHOST:8080/auth/login") else {
        return
    }
    var request = URLRequest(url: baseUrl);
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpMethod = "POST";
    request.httpBody = jsonData;
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data {
            print(data)
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
                print(json)
                if let user : UserLogged = try JSONDecoder().decode(UserLogged.self, from: data) {
                    UserDefaults.standard.set(user, forKey: "userLogged")
                }
            } catch {
                print(error)
            }
        }
}.resume()

1 Ответ

0 голосов
/ 18 января 2019

Вы можете легко разобрать этот json с декодером вместо JSONSerialization. Лучше сохранить токен пользователя в UserDefaults вместо целого пользователя с ключом, который имеет смысл, например userToken:

if let data = data {
    print(data)
    let decoder = JSONDecoder()

    do {
        let user = try decoder.decode(UserLogged.self, from: data)
        //now you parsed the json and get token and userId
        UserDefaults.standard.set(user.token, forKey: "userToken")
    } catch {
        //Parsing error, couldnt parse user.
    }
}
...