ios - 如何使用 Swift 4.2 将具有可编码结构的 JSON 响应加载到 tableview 中?
问题描述
我的场景,我正在尝试Codable
为我的JSON
响应创建。我已经完成了codable
结构,但我不知道如何将load
它放入tableview
. 在这里,每当我选择多个tableview
单元格时,我都需要获取所有选定的单元格数据username
和用户 ID。我不知道如何开始,请给我一些建议。
我的回复
{
"status": 200,
"user_list": [
{
"user_id": “1234”,
"permission": 1,
"active": 1,
"user": {
"firstname": “jack”,
"lastname": “m”
}
},etc,...
]
}
我的可编码格式
struct Welcome: Codable {
let status: Int
let userList: [UserList]
enum CodingKeys: String, CodingKey {
case status
case userList = "user_list"
}
}
struct UserList: Codable {
let userID: String
let permission, active: Int
let user: User
enum CodingKeys: String, CodingKey {
case userID = "user_id"
case permission, active, user
}
}
struct User: Codable {
let firstname, lastname: String
}
解决方案
首先,我会将您的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
...
}
推荐阅读
- amazon-web-services - 具有 cloudformation 的 AutoScaling ec2 实例
- javascript - 实时服务器 HTTPS 重定向
- sql - 如何在 T-SQL 中搜索 em dash 的存在?
- javascript - 为什么 jQuery 在点击时不检测动态添加的类?
- java - 可以隐藏私有方法吗?
- asp.net-core - 引导选择下拉菜单不呈现视图袋项目
- r - 使用 ESS 的块对齐注释
- mongodb - 具有多个任务的分布式官方 Mongodb Kafka 源连接器不起作用
- php - 使用 MySQL 相关性的搜索引擎开发,不适用于 PHP
- domain-driven-design - 在事件溯源中命名事件类型的最佳实践