Помогите Декодировать JSON URLRequest Data

server
swift
json

#1

Добрый день всем. Пожалуйста, помогите. У меня проблема. Не могу использовать декодированную data. Через @escaing вынес её как compition. Использовал как

OnAppear { (json) in
json.self = json }

И написал
@State var json: User = [String:Any]

но пишет ошибку: Неверный тип

Print в консоль выводит правильно
Вот мой словарь.


#2

покажите как вы используете модель


#3

func getRequest(_ complition: @escaping (User) -> Void) {

let url = URL(string: "http://meeting.softwarecenter.ru/api/user/list")
var request = URLRequest(url: url!)
request.addValue("Bearer 75|x4J8bWoJ6L3YY54J2vbnZ5gK5eG4Ul9PIU9FtH1b", forHTTPHeaderField: "Authorization")

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
    if let response = response {
        print(response)
    }
    
    guard let data = data else { return }
    print(data)
    
    do {
       let json = try JSONDecoder().decode(User.self, from: data)
				complition(json)
        
        
    } catch {
        print(error)
    }
}.resume()

}

struct User: Decodable {
var current_page: Int
var data: [UserData]
}

struct UserData: Decodable {
var id: Int
var first_name: String
var phone: String
var sex: Int
var data: MoreUserData?
}

struct MoreUserData: Decodable {
var region_id: Int
var age: Int
var reward: String
var description: String
var interests: String
}


#4

чет я сразу не заметил, почему у вас User = [String: Any] ?
Я не пишу на ui, не уверен возможно ли там такое, но вы типу присваиваете тип
используйте опциональный User
@State var json: User?
И после ответа передайте значение в переменную json


#5

ЮАЙ - не юай, а свифт один ))) Так неправильно, кончено.

конечно так :slight_smile:


#8

Добрый день, спасибо за ответы. Сделал так, но пишет ошибку, только другую.

ForEach(json?.data) { json in Text(json.data.id) }

Хотел использовать массив в UI. Но выбивает ошибки

Value of optional type ‘Range<Int>?’ must be unwrapped to a value of type ‘Range<Int>’
Value of type ‘Int’ has no member ‘data’