使用 SwiftJSON 将 Alamofire 结果 JSON 加载到表视图中
Posted
技术标签:
【中文标题】使用 SwiftJSON 将 Alamofire 结果 JSON 加载到表视图中【英文标题】:Load Alamofire result JSON into table view using SwiftJSON 【发布时间】:2019-09-12 17:11:52 【问题描述】:我正在尝试使用从 Web API 检索到的 JSON 数据填充 tableview。
我的用户模型有一个类:
class UserModel
var userID: String?
var fullName: String?
var emailAddr: String?
init(userID: String?, fullName: String?, emailAddr: String?)
self.userID = userID
self.fullName = fullName
self.emailAddr = emailAddr
我正在尝试填充:
func getUserList()
Alamofire.request("myURL here")
.responseJSON(completionHandler: (response) in
switch response.result
case .success(let value):
ProgressHUD.dismiss()
let json = JSON(value)
print(json)
for (_, _) in json
let user = UserModel(userID: "userID", fullName: "fullName", emailAddr: "email")
self.users.append(user)
self.tableView.reloadData()
ProgressHUD.dismiss()
case .failure(let error):
print(error.localizedDescription)
)
print(json)
的输出为:
代码没有进入'for'块,直接跳转到self.tableView.reloadData
这一行。
【问题讨论】:
【参考方案1】:其实你不需要 SwiftyJSON 转换,因为结果已经是一个数组
guard let userArray = value as? [[String:String]] else return
for item in userArray
let user = UserModel(userID: item["userID"]!,
fullName: item["fullName"]!,
emailAddr: item["email"]!)
self.users.append(user)
但是,我们鼓励您放弃SwiftyJSON
并使用Decodable
。它更高效,需要更少的代码
struct User
let userID, fullName, emailAddr: String
func getUserList()
Alamofire.request("myURL here")
.responseData(completionHandler: (response) in // responseData is crucial
switch response.result
case .success(let data):
ProgressHUD.dismiss()
do
self.users = try JSONDecoder().decode([User].self, from: data)
catch print(error)
self.tableView.reloadData()
ProgressHUD.dismiss()
case .failure(let error):
print(error.localizedDescription)
)
【讨论】:
【参考方案2】:您可以将结果转换为“字典数组”,然后创建对象。 像这样的:
func getUserList()
Alamofire.request("myURL here")
.responseJSON(completionHandler: (response) in
switch response.result
case .success(let value):
ProgressHUD.dismiss()
let json = JSON(value)
print(json)
if let jsonArray = json as? [[String: Any]]
let user = UserModel(userID: "userID", fullName: "fullName", emailAddr: "email")
self.users.append(user)
self.tableView.reloadData()
ProgressHUD.dismiss()
case .failure(let error):
print(error.localizedDescription)
)
【讨论】:
以上是关于使用 SwiftJSON 将 Alamofire 结果 JSON 加载到表视图中的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire中的responseJSON json解析
TableviewCell 中的 CollectionView :使用 Alamofire 和 SwiftyJSON 和 MVC 模型显示数据