Во-первых, я бы переименовал вашу UserList
модель в User
и User
просто в Name
(и переименовал это свойство только в имя ... затем вы можете переименовать свойства Name
)
struct Welcome: Codable { // you can avoid using `CodingKeys` here since you can
let status: Int // set `keyDecodingStrategy` of decoder which does work
let userList: [User] // for you
}
struct User: Codable {
let userId: String
let permission, active: Int
let name: Name
enum CodingKeys: String, CodingKey {
case name = "user"
case permission, active, userId
}
}
struct Name: Codable {
let first, last: String
}
Тогда я думаю, что в вашем случае ваш массив источников данных для UITableView
должен содержать только пользователей, поэтому ... ваши User
модели.
var users = [User]()
тогда выможно присвоить этот массив как свойство userList
вашего декодированного ответа
do {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let decoded = try decoder.decode(Welcome.self, from: someData)
self.users = decoded.userList
} catch { print(error) }
Теперь для UITableView
метод источника данных, который определяет количество строк, использует количество пользователей
func numberOfSections(in tableView: UITableView) -> Int {
return users.count
}
а для cellForRowAt
используйте определенного пользователя
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
...
let user = users[indexPath.row]
// e.g. let firstname = user.name.first
...
}