Swift 4中如何用Object Mapper追加字典数组及UserMedias数组?
在Swift 4中使用Object Mapper追加字典数组的实现方法
嘿,我来帮你搞定这个问题!在Swift 4里结合ObjectMapper处理数组追加其实很简单,我给你一步步拆解实现方法:
第一步:确保你的UserMedias模型正确实现Mappable协议
这是ObjectMapper解析数据的基础,你需要让模型类遵循Mappable,并实现必要的初始化和映射方法:
import ObjectMapper class UserMedias: Mappable { // 根据接口返回的字段定义你的属性,示例如下: var mediaId: Int? var url: String? var descriptionText: String? // 必须实现的初始化方法 required init?(map: Map) {} // 属性与JSON字段的映射逻辑 mutating func mapping(map: Map) { mediaId <- map["id"] url <- map["media_url"] descriptionText <- map["description"] } }
注意:这里的映射key要和接口返回的JSON字段完全匹配,大小写敏感哦!
第二步:解析登录返回的UserMedias数组并追加到messageList
登录成功后,从控制台返回的用户数据中提取UserMedias对应的字典数组,用ObjectMapper解析成[UserMedias]类型,再追加到你的空数组里:
// 假设登录接口返回的完整数据是responseDict(类型为[String: Any]) if let userMediasJSONArray = responseDict["UserMedias"] as? [[String: Any]] { // 使用ObjectMapper将字典数组转换为模型数组 if let parsedUserMedias = Mapper<UserMedias>().mapArray(JSONArray: userMediasJSONArray) { // 追加到已有的messageList数组 self.messageList.append(contentsOf: parsedUserMedias) // 刷新表格视图(必须在主线程执行UI操作) DispatchQueue.main.async { self.tableView.reloadData() } } }
额外场景:如果返回的是JSON字符串
如果登录接口返回的是JSON字符串而非字典,你可以先将字符串转换为字典数组再解析:
// 假设返回的是jsonString(类型为String) guard let jsonData = jsonString.data(using: .utf8), let userMediasJSONArray = try? JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]] else { return } let parsedUserMedias = Mapper<UserMedias>().mapArray(JSONArray: userMediasJSONArray) self.messageList.append(contentsOf: parsedUserMedias) // 刷新表格视图 DispatchQueue.main.async { self.tableView.reloadData() }
关键注意事项
- 确保
messageList是用var声明的可变数组(你已经做到啦) - 解析时如果出现数据为空的情况,检查JSON字段名和模型映射的key是否一致
- UI更新操作必须放在主线程,避免出现界面刷新异常的问题
内容的提问来源于stack exchange,提问作者Gorib Developer
相关产品推荐
相关产品推荐

